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

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