1 #include <iostream> 2 3 using namespace std; 4 5 class Base 6 { 7 public: 8 void mf(); 9 }; 10 void Base::mf() 11 { 12 cout << "Base::mf" << endl; 13 } 14 15 class Derived : public Base 16 { 17 public: 18 void mf(); 19 }; 20 void Derived::mf() 21 { 22 cout << "Derived::mf" << endl; 23 } 24 25 int main() 26 { 27 Derived d; 28 29 Base* pB = &d; 30 pB->mf(); // 调用Base::mf 31 Derived* pD = &d; 32 pD->mf(); // 调用Derived::mf 33 34 return 0; 35 }
说明:同样都指向d,但是却调用了不同的函数,原因是非虚函数是静态绑定的,即调用哪个函数是由声明时所决定的。而虚函数是动态绑定的,调用哪个函数是由运行时指向的对象决定的。
如上所述,如果重新定义了继承而来的非虚函数,那么得到的结果可能并不是你想要的;如果确实需要重新实现自己的函数版本,那么定义为虚函数好了。
时间: 2024-10-31 14:54:52