C 建構函式和析構函式是否可以繼承?

2021-06-26 23:42:39 字數 1095 閱讀 7204

先看乙個例子:

#include class a

// 建構函式不能為 virtual

a(int aa): a(aa)

virtual ~a()

public:

int a;

};class b : public a

b(int bb) : b(bb)

b(int aa, int bb): a(aa), b(bb)

~b()

public:

int b;

};class a2

explicit a2(int aa)

virtual ~a2()

};class b2: public a2

};int main()

/*constructor: a

constructor: b

constructor: a

constructor: b, b = 22

constructor: a, a = 11

constructor: b, a = 11, b = 22

constructor: a2

constructor: a2, aa = 11

destructor: b2

destructor: a2

destructor: b2

destructor: a2

destructor: b

destructor: a

destructor: b

destructor: a

destructor: b

destructor: a

*/

結論:1. 建構函式不能為 virtual, 建構函式不能繼承;

2. 如果子類不顯式呼叫父類的建構函式,編譯器會自動呼叫父類的【無參建構函式】;

3. 繼承建構函式(inheriting constructors)

(1) c++11 才支援;

(2) 實質是編譯器自動生成**,通過呼叫父類建構函式來實現,不是真正意義上的【繼承】,僅僅是為了減少**書寫量(參考 《c++ primer》)。

C 建構函式和析構函式是否可以繼承?

先看乙個例子 cpp view plain copy include class a 建構函式不能為 virtual a int aa a aa virtual a public int a class b public a b int bb b bb b int aa,intbb a aa b b...

C 建構函式和析構函式

1.建構函式是類的一種特殊方法,每次建立類的例項都會呼叫它。在建立乙個類的例項時,建構函式就像乙個方法一樣被呼叫,但不返回值。語法格式 訪問修飾符 類名 特性 1 其名字必須與類名相同,例如 public class myclass 2 不能被直接呼叫,必須通過new運算子來 呼叫。publiccl...

C 建構函式和析構函式

建構函式 class rectangel rectangel int l,int w 這是帶引數的建構函式,建構函式都是沒有返回值,並且和該類同名 int area 這是另一種形式的內聯函式,把宣告和定義寫在一起的也是內聯函式 private int length int width 析構函式 cl...