在c 中為什麼基類不預設構造時候派生類要呼叫基類建構函式進行初始化

時間 2021-09-04 03:24:51

1樓:匿名使用者

派生類的建構函式必須呼叫基類的建構函式,這是c++的內部規定。這樣派生類的實現可以專注於自己本身,不用考慮基類的事。

而且,在實際使用時,你根本就不知道大部分基類的實現細節,你只要做好自己派生類的事就行了。 比如你用vc,直接建立一個對話方塊類,你不需要知道對話方塊類是怎麼生成並顯示的,你只要寫你額外需要的一些**就行了。

2樓:匿名使用者

首先,c++本身就規定建立子類物件的時,先呼叫基類的建構函式,然後再呼叫自己類的建構函式。當我們的基類沒有自己定義建構函式時候(就是系統預設的建構函式)時。建立子類物件會先預設呼叫基類的預設建構函式。

但是,當我們的基類自己定義了建構函式,(可能定義了很多個)此時不會再自動生產預設構造。但是它不知道應該呼叫基類中的哪個構造,所以需要手動指定。

例:#include

class one

//沒有引數的建構函式

one(int a,int b):x(a),y(b)};class two:public one//因為基類已經定義2個構造,所以應該指定呼叫哪個void disp()

};void main()

3樓:匿名使用者

如果你在派生類中沒有顯式指明基類的建構函式,派生類會預設呼叫基類的預設建構函式,所以派生類在初始化的時候,如果呼叫的基類建構函式不是預設的,就需要顯式指明呼叫哪個建構函式。

4樓:匿名使用者

你說的好像有點問題,不管基類的建構函式是不是預設,都要呼叫基類的建構函式;只是當基類的建構函式是預設的時候,派生類也可以預設呼叫基類的預設建構函式,不被顯示呼叫。

c++中,為什麼派生類的建構函式如果沒有提供基類的初始化器,

5樓:a774888179巨蟹

c++中成員變數的初始化是在進入建構函式體之前的,如果你需要初始化一個派生類物件,先會呼叫基類的建構函式,然後為初始化列表中的派生類成員變數進行初始化,如果你的部分或全部的成員變數選擇在函式體內賦值,那麼編譯器會先為這些成員變數進行預設的初始化(呼叫其預設建構函式)然後使用copy assignment操作符為成員變數賦值。所以儘量使用初始化列表效率會更高。當然對於你的第二個問題,原因是派生類不能呼叫基類的private成員,所以如果你相對基類的私有成員初始化的話,就只能在初始化列表中呼叫其建構函式。

6樓:輝じov☆恆

這和你宣告的物件有關 如果你宣告的物件是派生類物件,你宣告的物件將直接到派生類中找建構函式,而不是到其他類中找,它也不會自己到其他類中找,除非你在派生類中呼叫了基類的建構函式.一般要是派生類中沒給出對基類建構函式的呼叫,它就會生成對無引數基類建構函式的自動呼叫.如果你明白為什麼要在派生類中呼叫基類的建構函式就可以理解了

如果你宣告的物件是基類,它毫無疑問會呼叫和它相符的建構函式不用謝

你的話我不是很明白

我只能說 在建構函式中 對基類的呼叫是要用初始化列表 而對派生類的成員是可以用初始化列表 也可以在函式裡直接初始化

至於我這麼說的原因我也不是很清楚

c++類中的類成員變數怎麼呼叫帶引數的建構函式來初始化?

7樓:匿名使用者

要呼叫帶參的構造抄函式,必襲須這樣

做:#include "stdafx.h"

class a

;a(int a);

int ax;

};class b

b() : bx(0) //這樣也行du/*****************/

void print()

/*************************/a bx; //這樣宣告

/**************************/};int main(int argc, char* argv)

c++中為什麼基類中只有帶引數的建構函式時,派生類中一定要顯示定義建構函式,並寫出基類的建構函式及引數

8樓:匿名使用者

因為建立派

抄生類物件時要呼叫基類的bai建構函式,當基類du沒有定義構函式時就調

zhi用預設dao無引數的建構函式。當只定義了有參的建構函式時就呼叫有參的建構函式,所以當派生類沒有給基類傳遞引數時就會出現錯誤。解決方法:

可以在基類中過載一個無參建構函式,或者給有參建構函式的引數設定預設值。

9樓:匿名使用者

當你定義一個派生類抄的物件時首

襲先呼叫的是基類的

建構函式,如基類的建構函式是帶參的 在派生類建構函式的後面會有基類的建構函式的傳參 否則就會報錯 指的是呼叫基類中你定義的這個建構函式而不是預設的無參建構函式

C 中,為什麼派生類的建構函式如果沒有提供基類的初始化器

a774888179巨蟹 c 中成員變數的初始化是在進入建構函式體之前的,如果你需要初始化一個派生類物件,先會呼叫基類的建構函式,然後為初始化列表中的派生類成員變數進行初始化,如果你的部分或全部的成員變數選擇在函式體內賦值,那麼編譯器會先為這些成員變數進行預設的初始化 呼叫其預設建構函式 然後使用c...

C 類中為什麼只有建構函式和拷貝建構函式有引數列表

對類的成員函式宣告來說,參數列不是建構函式和拷貝建構函式的專利,一般的類的成員函式,也是可以選擇引數個數的。並且還要注意,就算是那些比較 特殊 的成員函式,如operator 也是有函式表的,而且拷貝建構函式由於其功能的原因,它的參數列還是固定格式的。我猜你是想問,為啥解構函式就沒有參數列呢,如果是...

在C 的類中構造陣列的解決方案

你可以這樣 private中只要宣告一個char ptr 或者void ptr 然後一次性new一塊 raw memory,具體方法是ptr new sizeof base size 然後每增加一個base到陣列中的時候再初始化,具體方法是 base mybase new ptr base 10 這...