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繼承的派生類物件時,對於基類的公有成員,這個物件到底能不能訪問到呢?他...