C++ 不要重新定义继承的非虚函数
不要重新定义继承的非虚函数
如果基类和派生类有相同的非虚函数,会有什么情况发生?
看下面的例子:
class B {public: void mf();};void B::mf(){cout << "Call B::mf() Function !" << endl;}class D: public B { ... };int main(){D x; // x是类型D的一个对象B *pB = &x; // 得到x的指针pB->mf(); // 通过指针调用mfD *pD = &x; // 得到x的指针pD->mf(); return 0;}
class D: public B {public: void mf(); // 隐藏了B::mf; 参见条款50};
#include <iostream>using namespace std;class B {public:virtual void mf();};void B::mf(){cout << "Call B::mf() Function !" << endl;}class D: public B {public : void mf();};void D::mf(){cout << "Call D::mf() Function!"<< endl;}int main(){D x; // x是类型D的一个对象B *pB = &x; // 得到x的指针pB->mf(); // 通过指针调用mfD *pD = &x; // 得到x的指针pD->mf(); return 0;}