关于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()

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

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