關於c子類繼承的this指標的問題

2022-01-03 05:32:39 字數 1452 閱讀 4343

1樓:嶼浪

// cout<<"d="

我想應該是初始化順序吧

首先 cb類 初始化 基類 cd,這時候還並不知道派生類的 b ,所以會報錯

初始完基類以後才會初始化自己,這個時候才會有成員 b

2樓:

首先你要明確一點,this指標屬於某一具體物件,cb cb定義時,this指標屬於cb,可以呼叫cb的資料和函式成員,cd cd定義時,this指標屬於cd,可以呼叫cd的資料和函式成員。

cd()

註釋掉的這行**會報錯,是因為建構函式中的this是指向基類物件的,基類物件中沒有b這個資料成員。

3樓:匿名使用者

因為基類是實類,所以在呼叫的時候會使用基類成員

將基類和需要派生的成員定義為virtual型別就可以了

這就是c++中關於多型的一種表現

4樓:

基類指標在程式執行的時候的確指向的是一個派生類的物件,但指標的型別仍然是基類指標。c++是一種強型別語言,因此不能用基類指標型別的指標直接呼叫派生類;而且,同一個類可能有多種不同的派生類,因此不知道實際指向的會是哪個派生類。

如果確信是某個派生類的話,可以用這樣的方法來呼叫:

((cb*)this)->b = 1;

或者(dynamic_cast(this))->b = 1;

即首先進行一次指標的強制型別轉換。

注意如果在建構函式中的話,cb的部分現在還是沒有初始化的,因此即使讀出b的資料,也不會是2。因為按照c++的標準,建構函式執行的順序是從基類到派生類。

5樓:匿名使用者

看不明白你的問題 在cb():cd()這樣不行嗎

c++ 基類與派生類中this指標與*this問題

6樓:匿名使用者

public:

int a[100]; //400位元組 增加的資料成員

7樓:匿名使用者

給你說詳細點吧!

sizeof是編譯器在編譯時根據表示式的靜態型別來確定所佔用的儲存空間。

cout << "base" << endl;

cout << "size of *this is:" << sizeof(*this) << endl;

這裡的this的靜態型別是base指標,所以sizeof( *this )的值就是1了。

8樓:**v小法師

子類物件有基類物件,而子類作用域包括基類

c++ 子類呼叫父類的成員函式this指標

9樓:匿名使用者

肯定是a了,b呼叫a類成員函式,在成員函式內部,無論何時,this都是指向該類物件的指標,因此無論如何this都是a類的

C 裡指標變數自身值的問題,關於c 中指標變數的問題

pt 1244996 是pt的地址 p 後 p p 優先順序高,因此 地址變為了 1245000 注意整形指標 1,其實就是 4,因為整形的size是4位元組 p 1245064 是地址1245000 對應的記憶體值,是不確定的 p 1244992 是p這個指標本身在記憶體中存放的位置,這個也是不確...

關於C語言指標的問題如圖,求解釋

這樣 bai理解不 int sss char s,char t 終止時 1 s 指向結尾,t 沒有到結尾,返回 s t 為正數 終止時 2 s 指向結尾,t 指向結尾,返回 s t 為 0 終止時 3 s 沒有到結尾,t 指向結尾,返回 s t 為負數 return s t 因為有一個等於的符號 所...

C 為什麼基類指標不能指向繼承方式為protected與p

對於繼承方式為protected和private的派生類物件,基類的公有成員 私有成員和保護成員都是不可見的,除非你在派生類中override了基類的成員並宣告為public,所以你把基類指標指向protected和private繼承的派生類物件時,對於基類的公有成員,這個物件到底能不能訪問到呢?他...