C 建構函式 父類 成員物件的如何專業地初始化

時間 2021-05-31 05:09:21

1樓:「已登出」

不考慮效能的情況下

也有以下問題

1.要求這個成員的型別有可訪問的無參建構函式2.要求這個成員的型別有可訪問的賦值函式

很顯然很多態別並不符合這幾點

正確做法:

class

Person

{}Person

(std

::string

&&name):

name

{}public

:void

SetName

(std

::string

const

&name)&

;void

SetName

(std

::string

&&name)&

;std

::string

const

&GetName

()const&;

private

:std

::string

name;};

class

Student

:public

Person

{}Student

(std

::string

&&name

,int

level=0

):Person

(std

::move

(name

)),level

{}private

:int

level;};

2樓:dontbeatmycat

基類子物件,成員物件,引用,const成員必須放到成員初始化列表裡面初始化。

普通int,double這種不是物件,不是引用,非const的東西,放到建構函式體裡面賦值也沒有問題。

3樓:白如冰

初始化和賦值是兩個概念

乙個成員,即使沒有在初始化列表裡初始化,也會呼叫其預設建構函式進行初始化,如果這個物件的類沒有預設建構函式,則會報錯

也就是說,當你在建構函式的函式體裡賦值的時候,成員其實已經預設初始化過了

c 類的建構函式初始化問題??

Right If you don t specify any constructors,the compiler will write one for you that doesn t take any arguments.This compiler generated default constr...

C 中函式return a A類物件 會生成臨時變數,若A類成員指標指向堆記憶體,那堆會拷過去嗎?

我比梅西小一歲 可以把a假設成乙個shared ptr物件,再結合shared ptr的原理就能很好的理解怎麼管理類裡的指標。除此之外還會有Return Value Optimization的情況,這種情況就不會生成臨時物件然後返回的時候拷貝。 Mimosa 這是比較複雜的問題,這個不僅僅要看ret...

c 中乙個只有有參建構函式的類怎麼做為函式的形參?

GarfieldKwong 你編譯錯誤的原因其他答主已經說清楚了,就是DepthFirstSearch裡的成員Graph g導致的。DepthFirstSearch的建構函式沒有顯示初始化Graph g,編譯器預設呼叫Gragh 良好的是類的建構函式裡每個成員變數都要顯示初始化。其實編譯器裡Dept...