類的建構函式中可以不包含對其子物件的初始化啊

2021-05-14 10:09:55 字數 1862 閱讀 4215

1樓:匿名使用者

在建構函式體執行前,會執行類的初始化序列。

classa::classa()

: ... ... // 冒號後面的**就是初始化序列一般,類的成員應該在初始化序列裡顯式的初始化。

但如果你不這麼做,編譯器也會幫你呼叫這個成員所屬類的預設建構函式來初始化這個成員。

但是如果這個成員所屬的類沒有預設建構函式,那編譯就會報錯。這時你必須在成員初始化序列中顯示的初始化這個成員。

2樓:匿名使用者

不太明白你問的是什麼意思,我想你問的意思應該是「一個類的建構函式中可不可以不包含對其子物件的初始化啊?」,如果是這個意思,我想我能回答這個問題:

如果其子物件的建構函式中有引數則就必須包含對其子物件的初始化,反之,則不包含。其實,傳不傳引數取決於該物件所屬類的建構函式是否有引數,不管在哪種情況下都遵循這個規律。

3樓:匿名使用者

從語法角度來講沒有問題,但應用可能會存在問題

建構函式是用來初始化所定義的物件,如果一個類中沒有定義任何建構函式則該物件便無法初始化說法對嗎?

4樓:匿名使用者

如果一個類中沒有定義任何建構函式,編譯器就會自動合成一個預設建構函式,並對一些類的成員進行初始化,你可以執行一下這個程式:

雖然類y沒有定義建構函式,但其成員_x還是被初始化了,即編譯器合成的建構函式呼叫了x的建構函式,將_a初始化為33

#include

using namespace std;

class x

int _a;

};class y

;int main()

c++中子物件的初始化可在複合類的建構函式的函式體內進行嗎?還是子物件的初始化只能在初始化列表中進行?

5樓:陳宗權

嚴格意義上的子物件初始化只能在複合類的建構函式的初始化列表中進行。

作為變通,你可以在子物件所屬的類中把真正執行初始化工作的**寫成一個普通公開成員函式,在複合類的建構函式體內呼叫這個函式。

class a

a(int d):data(d){}

void init(int d)

};class b

};class c};

類的成員變數一定要在建構函式裡初始化嗎

6樓:好程式設計師

可以直接賦值的,在構造裡寫只不過是為了方便,因為使用一個類的時候通常都要先new出該類的例項

在構造裡賦值,這樣在new這個類的例項的時候成員變數就已經被初始化了。方便使用而已。

子物件怎麼宣告並初始化呢?半徑類中成員變數radius,圓類中怎麼宣告並初始化子物件r使之寫成r.radius 5

7樓:山水阿銳

您好,當一個類的物件用作另一個類的資料成員時,稱為物件成員或子物件(sub-class)。包含子物件的類被稱為複合類(composite class)。這種功能稱為複合(composition)。

例如:class a

;class b

;其中class b中的成員a(即class a的物件)是子物件。子物件也需要初始化,這也要依靠初始化列表。

class circle

public circle(double r)public double area()

public double circumference()public double getradius()public void setradius(double radius)

public string tostring()}

php中建構函式可以例項化物件嗎

建構函式不是必須的,當一個類被例項化的時候建構函式 如果有 會被 用,它具體做什答麼視需求而定。例如,為邊長為4的正方形宣告一個類,那麼它可能不需要建構函式,如class demo 而為正方形宣告一個類的時候,那麼它需要建構函式來指定正方形例項的邊長,如 class demo 你問題中的 不恰當,雖...

c 中,定義的類中成員可以是函式的呼叫嗎?可以是變數之間的

沒太看懂你的問題,建議對類的概念再體會體會。類中主要由兩部分構內 成 成員變數和成員函容數。變數描述類的屬性,而函式則是類的功能。當然,成員變數也可以是其他類的物件,你也可以在成員函式中呼叫其他類的公有成員函式,這些屬於類與 類之間的組合和依賴。建議寫幾個類封裝的程式,再用類建立多個物件,體會類與物...

c中的建構函式是怎麼回事

任何時候,只要建立類或結構,就會呼叫它的建構函式。類或結構可能有多個接受不同引數的建構函式。建構函式使得程式設計師可設定預設值 限制例項化以及編寫靈活且便於閱讀的 如果您沒有為物件提供建構函式,則預設情況下 c 將建立一個建構函式,該建構函式例項化物件,並將所有成員變數設定為此處列出的預設值 預設值...