2 huang1433 huang1433 于 2016.04.20 21:23 提问

关于const虚函数问题,求解

class Base
{
public:
    virtual void print() const = 0;
};

class Test : public Base
{
public:
    void print() {cout << "Test::print()" << endl;}
    void print() const { cout << "Test::print() const" << endl; }
};


void main()
{
    Base* pChild = new Test();
    pChild->print();

    Test* p2 = new Test();
    p2->print();

}

为什么输出的是:
Test::print() const
Test::print()

2个回答

caozhy
caozhy   Ds   Rxr 2016.04.20 21:41

void print() const对virtual void print() const = 0;构成覆盖,所以通过Base指针访问print,访问的是void print() const,输出Test::print() const
通过派生类调用print,同时有两个版本,一个是基类继承的,一个是派生类自己的,根据就近原则,访问后者,所以输出Test::print()

oyljerry
oyljerry   Ds   Rxr 2016.04.21 14:07

第一个是多态,通过父类指针调用子类的对应的虚函数
第二个就是纯粹的类成员函数调用

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!