父類指標和子類指標的步長

2021-09-11 06:19:13 字數 1043 閱讀 9523

#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;

for(i =

0, p =

&array[0]

; i <

3; i++

, p++

)return0;

}

結果: 輸出三次 son print(),

將子類新增乙個變數 int b 再重新測試:

#include

"stdafx.h"

#include

using namespace std;

class father

virtual void

print()

private:

int a;};

class son : public father

virtual void

print()

private:

int b;};

intmain()

;int i;

for(i =

0, p =

&array[0]

; i <

3; i++

, p++

)return0;

}

會發現程式奔潰,因為上次**父類和子類的大小一樣, 都只有乙個變數 int a,所以用父類指標指向子類物件,p++剛好可以,如果子類有自己的變數,則父類的指標p++不會指向下個子類的首位址,程式崩潰。

結論: 指標++,會根據指標型別的大小++,更不是簡單的+1,對於多型,禁止使用父類指標++等操作

父類指標的步長和子類指標的步長問題

只要是指標,就要符合指標的運算方式,不管你是不是類指標 如果子類在繼承了父類之後,沒有增加屬性,那麼此時他們的步長一致,如果子類增加了屬性那麼子類的步長將大於父類。eg 1 include2 using namespace std 34 class parent 10virtual void tes...

父類指標的步長和子類指標的步長是不一樣的

當用父類指標或者引用指向子類物件時,可以發生多型 是因為有vptr指標和虛函式表的存在 但是這個指標和子類指標的步長時不一樣,具體看如下 特別注意看注釋。如下 include using namespace std 結論 多型是用父類指標指向子類物件 和 父類步長 是兩個不同的概念 class pa...

子類指標不能轉換為父類指標???

vtkstructuredpoints是vtkimagedata的子類,為何會有上述錯誤?原來是沒有 include vtkstructuredpoints.h 子類的標頭檔案 因為沒有這個標頭檔案,編譯器根本不知道這兩個類之間有繼承關係。include vtkactor.h include vtk...