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()
第一个是多态,通过父类指针调用子类的对应的虚函数
第二个就是纯粹的类成员函数调用