1
這是簡單的代碼我處理,以瞭解繼承下來鑄造了鑄件等類繼承和上溯造型在C++
class A
{ public:
void p() {cout << 「A::p\n」;}
virtual void q() {cout << 「A::q\n」;}
};
class B : public A
{ public:
void p() { cout << 「B::p\n」;}
void q() { cout << 「B::q\n」;}
};
int main()
{ A* a1 = new B;
a1 -> p();
a1 -> q();
}
其次是我的預期輸出
B::p
B::q
以下是實際輸出
A::p
B::q
我的理解是,B類是繼承類A.然後我在主體中,我們創建了一個指向A類的指針,並將它的引用設置爲B.因此,當我們調用函數p()和q()時,我期望B類內部的任何內容都可以打印。
任何人都可以澄清我的誤解嗎?
您正在調用基類指針上的非虛方法 - 您爲什麼期望派生類的重寫被調用?這正是「虛擬」的意義所在 - 「A :: p」不是。 – 2014-12-08 04:37:51
你究竟在哪裏上傳任何東西? – Blindy 2014-12-08 04:39:30
@Bindind:在'A * a1 = new B;'中。從指針到派生到指向基礎的指針(無論是隱式還是其他)通常俗稱爲「向上」(因爲您正在向上「繼承」繼承層次結構)。反向 - 總是顯式的 - 投射然後是「低調」。 – 2014-12-08 05:03:19