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

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

1樓:a774888179巨蟹

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

2樓:輝じov☆恆

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

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

你的話我不是很明白

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

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

c++為何無法用指標引用這些派生類成員函式

3樓:育知同創教育

參考下面**

#include

using namespace std;

struct param;

struct circleparam:public param;

class point

virtual void print()

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

派生類的建構函式必須呼叫基類的建構函式,這是c 的內部規定。這樣派生類的實現可以專注於自己本身,不用考慮基類的事。而且,在實際使用時,你根本就不知道大部分基類的實現細節,你只要做好自己派生類的事就行了。比如你用vc,直接建立一個對話方塊類,你不需要知道對話方塊類是怎麼生成並顯示的,你只要寫你額外需要...

c 基類指標指向派生類時可呼叫派生類中定義的函式嗎

這種現象在c free中執行沒有錯誤,請問是怎麼回事?重新定義指是在基類指標指向派生類,存的是派生類的地址,所以你強制轉換一下指標型別,基類 灰晞鬱 你說的 派生類中定義的函式 我做兩種理解 第一種 派生類中自己寫的 基類中沒有的函式。這種函式是基類的指標無法訪問的,必須把基類的指標通過強制型別轉換...

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

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