C 基礎 建構函式相關的問題。。。

2022-05-07 16:45:14 字數 873 閱讀 2591

先貼上**~:

#include using

namespace

std;

class

a a(

intt)

void

print()

private

:

inti;

};int

main()

猜猜輸出什麼?

如果你覺得是1 1的話,恭喜你,繼續看下去吧。

輸出的是1 2,建構函式a(int t)中的a()函式並不能改變i的值。

換句專業點的,建構函式不可以呼叫類中的其他建構函式完成初始化。雖然呼叫它會執行,但是無法對成員變數進行初始化,理由是兩個建構函式不是同乙個this指標。

作為乙個自認為c++學的還不錯的人,我竟然還一直以為這樣很合理。。。

打這裡例子是因為最近寫的乙個程式出了問題,問題的原因就是上面這個。。。

因為這個例子,又想到如果基類中有多個建構函式,子類呼叫的是哪乙個?才發現c++有處理的方式,即像初始化成員變數那樣呼叫基類建構函式即可,如下:

#include using

namespace

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...