假設有這樣一段**:
class.h:
class a ;
class b : public a ;
class.cpp:
a::a()
b::b()
void b::run()
void b::func()
main.cpp:
int main()
這裡class a是乙個虛基類,class b是由classa派生來的類,在class b中又定義了乙個基類中沒有的方法func()。
在主函式中,通過a型別的指標呼叫b型別的方法func()時會報錯:
main.cpp:10:8: error: 『class a』 has no member named 『func』 p->func();
這是因為p是a的指標,編譯器傻傻的在a的**空間中找func這個方法,自然找不到。
編譯器既然這樣笨,就得靠聰明的我們來告訴他這個指標其實指向了class b的**空間,可以在裡面找到func()方法。c++提供了乙個運算子來讓我們告訴編譯器如何轉換,就是dynamic_cast。下面就是講class a*強制轉換為class b*的方法:
class b* pt = dynamic_cast(p);
所以為了解決上面的問題,可以將main.cpp改寫如下:
int main()
這樣編譯器就能找到func了。 關於基類指標 派生類指標 基類物件派 生類物件問題
1 基類指向派生類的指標 2 派生類指向基類的指標 3 以及將派生類指標強制轉換為基類指標 4 將基類指標強制轉換為派生類指標 無論是基類指向派生類還是派生類指向基類,重點就是哪個類的指標就呼叫哪個類的方法,而輸出的是指標指向的物件。基類指向派生類的指標即將派生類物件賦給基類指標,如果輸出的話,呼叫...
C 基類 派生類指標轉換
主要用到static cast和dynamic cast dynamic cast 1.dynamic cast是非常安全的,因為在不行的時候他會返回空指標 2.在多繼承中,由乙個基類轉換到另乙個基類,只能用dynamic cast 但是dynamic cast的使用是有侷限的,也就是基類一定要有虛...
基類指標指向派生類
include class a virtual void vt private void a2 protected void a3 class b public a virtual void vt private void b2 protected void b3 int main 結論 1 對於派...