先貼上**~:
#include usingnamespace
std;
class
a a(
intt)
void
print()
private
:
inti;
};int
main()
猜猜輸出什麼?
如果你覺得是1 1的話,恭喜你,繼續看下去吧。
輸出的是1 2,建構函式a(int t)中的a()函式並不能改變i的值。
換句專業點的,建構函式不可以呼叫類中的其他建構函式完成初始化。雖然呼叫它會執行,但是無法對成員變數進行初始化,理由是兩個建構函式不是同乙個this指標。
作為乙個自認為c++學的還不錯的人,我竟然還一直以為這樣很合理。。。
打這裡例子是因為最近寫的乙個程式出了問題,問題的原因就是上面這個。。。
因為這個例子,又想到如果基類中有多個建構函式,子類呼叫的是哪乙個?才發現c++有處理的方式,即像初始化成員變數那樣呼叫基類建構函式即可,如下:
#include usingnamespace
std;
class
a a(
intt)
intget
()
private
:
inti;
};class b:public
a b(
intt):a(t)
};int
main()
如果在同乙個類中,建構函式需要完成類似的成員初始化,可以另寫乙個專門初始化變數的函式。
C 建構函式問題
初始化列表 與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。class foo 初始化列表 private string name int id 從概念上來講,建構函式的執行可以分成兩個階段,初始化階段 和計算階段...
c 基礎 建構函式 this new
建構函式 作用 幫助我們初始化物件 給物件的每個屬性依次的賦值 建構函式是乙個特殊的方法 1 建構函式沒有返回值,連void也不能寫。2 建構函式的名稱必須跟類名一樣。建立物件的時候會執行建構函式 建構函式是可以有過載的。public student 類當中會有乙個預設的無引數的建構函式,當你寫乙個...
C 基礎 在建構函式內部呼叫建構函式
看下面的面試題 include using namespace std struct cls cls int main 列印的結果是系統的乙個隨機值。所以這種直接在建構函式中呼叫另外的乙個建構函式是不可行的。奇怪的地方在於建構函式中呼叫了自己的另乙個建構函式 我們知道,當定義乙個物件時,會按順序做2...