A派生B,B派生C,現在A,B,C都有一個disp函數(同名同參)用來輸出自己的類名?,F在是這樣的C *c = new C;B *b = c; //注意這里用的是Bb->disp(); //當A,B,C的disp函數都不用virtual修飾,輸出結果是B//如果只給A的disp函數使用virtual修飾,我本來以為還是輸出B,但實際上輸出了C。那么為什么?
1 回答

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
你其實對virtual關鍵字的繼承關系有誤解。你的直觀感覺是“我只給A的disp函數添加了virtual修飾”,但事實是,由于編譯器檢測到B中的disp()函數是A中的虛函數disp的重載形式,該函數也自動成為virtual函數,不論你是否顯式聲明了virtual關鍵字。然后,根據繼承關系,C中的disp也同理。
- 1 回答
- 0 關注
- 689 瀏覽
添加回答
舉報
0/150
提交
取消