結論:
定義乙個父類物件,將該父類物件的指標強制型別轉換為子類指標,並賦給乙個子類指標,則:該子類指標將指向該父類物件,但是其this指標仍然是指向子類的指標。
當該指標呼叫虛成員函式時,將按照物件的記憶體布局(指向虛函式表的指標儲存在該物件的前四個位元組)呼叫父類虛成員函式。
當該指標呼叫普通成員函式時,將通過this指標呼叫位於**段的該子類的成員函式。
例1、非虛成員函式
typedef void(*fun)(void);
class base
void fun()
輸出:
由輸出"it is derived's this"可以判斷:d仍為指向子類的指標。
由輸出「1「可以判斷:d指向的物件仍為父類物件b。
例2、虛成員函式
typedef void(*fun)(void);
class base
virtual void fun()
輸出
由輸出"it is derived's this"可以判斷:d仍為指向子類的指標。
由輸出" base's funciton"可以判斷:f1指向父類虛函式表的第乙個函式,d指向的物件仍為父類物件b5。
由輸出「1「可以判斷:d指向的物件仍為父類物件b。
父類指標和子類指標的步長
include stdafx.h include using namespace std class father virtual void print private int a class son public father virtual void print intmain int i fo...
子類指標不能轉換為父類指標???
vtkstructuredpoints是vtkimagedata的子類,為何會有上述錯誤?原來是沒有 include vtkstructuredpoints.h 子類的標頭檔案 因為沒有這個標頭檔案,編譯器根本不知道這兩個類之間有繼承關係。include vtkactor.h include vtk...
c 父類指標指向子類物件
父類子類指標函式呼叫注意事項 1,如果以乙個基礎類指標指向乙個衍生類物件 派生類物件 那麼經由該指標只能訪問基礎類定義的函式 靜態聯翩 2,如果以乙個衍生類指標指向乙個基礎類物件,必須先做強制轉型動作 explicit cast 這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾...