C++动态多态的使用,如果使用引用的话,咋操作

在学习多态

#include
using namespace std;
class Calculator2
{
public:
    int m_Num3;
    int m_Num4;
    virtual int Getresult()
    {
        return 0;
    }
};
class Addcalculator :public Calculator2
{
public:
    int Getresult()
    {
        return m_Num3 + m_Num4;
    }

};
class Subcaluculator :public Calculator2
{
    int Getresult()
    {
        return m_Num3 - m_Num4;
    }
};
class Mulcalculator :public Calculator2
{
    int Getresult()
    {
        return m_Num3 * m_Num4;
    }
};
class Dividecalculator :public Calculator2
{
    int Getresult()
    {
        return m_Num3 / m_Num4;
    }
};

void test2()
{
    Calculator2* c = new Addcalculator;
    c->m_Num3 = 1;
    c->m_Num4 = 2;
    cout << c->m_Num3 << "+" << c->m_Num4 << "=" << c->Getresult() << endl;
    delete c;
    c = new Subcaluculator;
    c->m_Num3 = 1;
    c->m_Num4 = 2;
    cout << c->m_Num3 << "-" << c->m_Num4 << "=" << c->Getresult() << endl;
    delete c;
    c = new Mulcalculator;
    c->m_Num3 = 1;
    c->m_Num4 = 2;
    cout << c->m_Num3 << "*" << c->m_Num4 << "=" << c->Getresult() << endl;
    delete c;
    c = new Dividecalculator;
    c->m_Num3 = 1;
    c->m_Num4 = 2;
    cout << c->m_Num3 << "/" << c->m_Num4 << "=" << c->Getresult() << endl;
    delete c;
}
int main()
{
    test2();
    system("pause");

    return 0;
}

这是写了个就是了解计算器的原理的代码,有些粗糙,数据重输入数据类型啥的先别管。想问一下,那个test2里边写的是用指针你在堆区开辟了一个地址存放那个父类的对象的指针。

如果剖去下边test2()。想拿引用做地址存放那个父类的对象的指针。该咋操作

你对引用可能理解有偏差,引用你可以理解为别名,主要用在操作原数据时有的场景用,比如函数传参用引用,函数内部修改,外部原变量能发生变化。

img

对象的指针你用一个指针变量直接保存就够了,没必要用引用,指针本身存储的就是一个地址。

#include <iostream>
using namespace std;

class A{
public:
    virtual void Print() const{
    cout<<"A"<<endl;
    }
};

class B: public A{
    public:
    void Print()const{
        cout<<"B"<<endl;
    }
};


int main()
{
    const A& a = B();
    a.Print();
    return 0;
}
#include <iostream>
using namespace std;

class A{
public:
    virtual void Print(){
    cout<<"A"<<endl;
    }
};

class B: public A{
    public:
    void Print(){
        cout<<"B"<<endl;
    }
};


int main()
{
    B b;
    A& a = b;
    a.Print();
    return 0;
}