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