基類指標指向子類物件時的函式呼叫判斷

2021-10-07 10:57:44 字數 592 閱讀 4113

以下用來學習基類指標指向子類物件時的情況

base *pb = new derived();

分析其建立過程:

1.new乙個子類物件,為其生成乙個指向該種子類虛函式表vtable的指標vptr,指向derived::func();

2.建立乙個基類指標指向它,基類沒有的成員變數將無法通過該指標解引用後呼叫,但vptr還是那個vptr,vptr指向的虛函式表裡還是derived::func();

目前來看這種判斷方法還沒有出錯

#include

using

namespace std;

class

base

~base()

virtual

void

func()

};class

derived

:public base

~derived()

virtual

void

func()

/*int func(int a) */};

intmain()

繼承,基類指標指向子類物件

include include using namespace std class a a a class b public a b void update void print b b class c public a c void update void print c c class d pu...

c 父類指標指向子類物件

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

父類指標指向子類物件問題

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