C 中使用基類指標呼叫派生類中定義的方法

2021-07-12 01:08:43 字數 776 閱讀 7333

假設有這樣一段**:

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 對於派...