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

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