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

2021-07-07 03:53:24 字數 1340 閱讀 6934

先看乙個例子:

[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(bb)   

~b()   

public

:  int

b;  

};  

class

a2  

explicit

a2(int

aa)   

virtual

~a2()   

};  

class

b2: 

public

a2  

};  

intmain()  

/*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》)。

from: 

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

先看乙個例子 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 cl...

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...