虛擬基類的初始化

2021-05-27 18:37:26 字數 975 閱讀 1443

無論虛擬基類出現在繼承層次中的哪個位置上,它們都是在非虛擬基類之前被構造

虛擬基類的初始化成了最末層繼承類的責

namespace ex18_15

; base( string );

base( const base&);

// ...

protected:

string _name;

};class derived1 : /*virtual */public base

derived1(string s) : base(s)

derived1(const derived1& d) : base(d)

};//     

//     class derived2 : virtual public base

//     ;

//         derived2(string s) : base(s)

//         derived2(const derived1& d) : base(d)

//     };

class vmi : public derived1/*, public derived2*/

//如果初始化列表中沒有base(s)則base用預設建構函式構造

vmi(string s) : derived1(s)/*, derived2(s),*//*base(s)*/

vmi(const vmi& v) : /*derived2(v), */derived1(v)/*,base(v)*/

};class final : public vmi

//如果初始化列表中沒有base(s)則base用預設建構函式構造

final(string s) : vmi(s)/*, base(s)*/

final(const final& f): vmi(f)/*,base(f)*/

}; inline void test()

}

虛基類的初始化

使用虛基類時,虛基類時被共享的,也就是在繼承體系中無論被繼承多少次,物件記憶體模型中均只會出現乙個虛基類的子物件,即使共享虛基類。但是必須要有乙個類來完成基類的初始化,同時還不能夠重複進行初始化。c 標準中選擇在每一次繼承子類中都必須書寫初始化語句,但是虛基類的初始化是由最後的子類完成,其他的初始化...

Python小技巧之 基類初始化

class base object def init self print base init class derived base def init self print derived init super derived,self init obj derived derived init b...

類的初始化

類的初始化通產有3種型別 使用初始化列表,在建構函式體中賦值,以及使用預設建構函式。先說前兩種 初始化列表與在建構函式體中賦值的區別在 呢?主要有兩點 第一,有的成員不能使用函式體中的 初始化。這其實就是初始化與賦值的區別 比如比如const 成員,引用型別,以及沒有定義預設建構函式的類,它們都必須...