只要基類在定義成員函數時已經聲明了virtue關鍵字,在派生類實現的時候覆蓋該函數時,virtue關鍵字可加可不加,不影響多態的實現。
容易與隱藏混淆:
隱藏是指派生類的函數屏蔽了與其同名的基類函數,規則如下:
1) 如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
2) 如果派生類的函數與基類的函數同名,並且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意這種情況與函數重載的區別,重載發生在同一個類中。)。
#includeusing namespace std; class Base { public: virtual void f(float x) { cout<<"BASE::f"< f(1.2f); pb->f(1.2f); pd->g(1.2f); pb->g(1.2f); pd->h(1.2f); pb->h(1.2f); return 0; }