父類指標指向子類物件的理解

2021-08-07 16:11:00 字數 916 閱讀 9773

父類子類指標函式呼叫注意事項

1,如果以乙個基礎類指標指向乙個衍生類物件(派生類物件),

那麼經由該指標只能訪問基礎類定義的函式(靜態聯翩)

2,如果以乙個衍生類指標指向乙個基礎類物件,必須先做強制轉型動作(explicit cast),這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾。(一般不會這麼去定義)

3,如果基礎類和衍生類定義了相同名稱的成員函式,那麼通過物件指標呼叫成員函式時,

到底呼叫那個函式要根據指標的原型來確定,而不是根據指標實際指向的物件型別確定。

虛函式就是為了對「如果你以乙個基礎類指標指向乙個衍生類物件,那麼通過該指標,你只能訪問基礎類定義的成員函式」這條規則反其道而行之的設計。

如果你預期衍生類由可能重新定義乙個成員函式,那麼你就把它定義成虛函式( virtual )。

polymorphism就是讓處理基礎類別物件的程式**能夠通透的繼續適當地處理衍生類物件。

純虛函式:

virtual void myfunc ( ) =0;

純虛函式不許定義其具體動作,它的存在只是為了在衍生類鐘被重新定義。只要是擁有純虛函式的類,就是抽象類,它們是不能夠被例項化的(只能被繼承)。如果乙個繼承類沒有改寫父類中的純虛函式,那麼他也是抽象類,也不能被例項化。

抽象類不能被例項化,不過我們可以擁有指向抽象類的指標,以便於操縱各個衍生類。

虛函式衍生下去仍然是虛函式,而且還可以省略掉關鍵字「virtual」。

看個例子:

#include using namespace std;

class a

virtual void bar()

};class b: public a

void bar()

};int main()

父類指標指向子類物件的理解

虛函式 父類子類指標函式呼叫注意事項 1,如果以乙個基礎類指標指向乙個衍生類物件 派生類物件 那麼經由該指標只能訪問基礎類定義的函式 靜態聯翩 2,如果以乙個衍生類指標指向乙個基礎類物件,必須先做強制轉型動作 explicit cast 這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師...

父類指標指向子類物件的理解

父類子類指標函式呼叫注意事項 1,如果以乙個基礎類指標指向乙個衍生類物件 派生類物件 那麼經由該指標只能訪問基礎類定義的函式 2,如果以乙個衍生類指標指向乙個基礎類物件,必須先做強制轉型動作 explicit cast 這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾。一般不會...

c 父類指標指向子類物件

父類子類指標函式呼叫注意事項 1,如果以乙個基礎類指標指向乙個衍生類物件 派生類物件 那麼經由該指標只能訪問基礎類定義的函式 靜態聯翩 2,如果以乙個衍生類指標指向乙個基礎類物件,必須先做強制轉型動作 explicit cast 這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾...