问题描述
- 关于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()
解决方案二:
第一个是多态,通过父类指针调用子类的对应的虚函数
第二个就是纯粹的类成员函数调用
时间: 2024-08-23 19:37:00