一、看一個隱藏non-virtual函數的例子
假設class D以public的方式繼承于class B,代碼如下:
class B {public:void mf();};class D :public B {};int main(){D x;B *pB = &x;pB->mf(); //調用B::mf()D *pD = &x;pD->mf(); //調用D::mf()return 0;}
二、靜態綁定與動態綁定
關于靜態綁定、動態綁定的概念之前,大家先了解下靜態類型的類變量和動態類型的類變量概念和區別。
靜態類型的類變量:在編譯時就已經知道是什么類型的了
動態類型的類變量:自己所指的類型不明確,直到運行時才知道
如果表達式既不是引用也不是指針,那么其就沒有靜態類型和動態類型的概念,因為其只能與自己類型一致的對象綁定到一起
演示案例
當我們使用基類的引用(或指針)時,我們并不清楚該引用(或指針)所綁定的對象的真實類型,該對象可能是基類的對象,也可能是派生類的對象。只有在程序運行的時候我們才知道所綁定的對象的真實類型
class A {}; class B:public A{}; int main() { A a;