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