C 11 繼承建構函式與委託建構函式

2021-10-03 08:46:23 字數 1388 閱讀 5899

一、繼承建構函式

如果基類的建構函式很多,那麼子類的建構函式想要實現同樣多的構造介面必須一一呼叫基類的建構函式,於是c++11 引入繼承建構函式。

class

_a_a

(double _indouble,

int _inint)_a(

float _infloat,

int _inint,

const

char

* _char)};

class_b:

public _a

};

僅僅使用using _a::_a 就把基類中的建構函式都繼承到子類b中。

1、 c++11中的繼承建構函式特性最有用的場合就是,派生類只是在基類的基礎上新增了幾個新的介面, 這個時候繼承建構函式最能夠展現威力.但是缺陷就是, 繼承建構函式只會初始化基類中的成員變數(畢竟只是從基類繼承下來的), 對於派生類中的變數無能為力.(可以使用c++11的新特性:資料成員就地初始化,解決派生類資料成員初始化的問題)。

2、 一旦子類繼承了基類的建構函式,那麼子類就不會自動生成預設建構函式。如下所示:

struct _base};

struct _derived : _base

;int

main

(int _argc,

char

**_ar**)

二、委託建構函式

委託建構函式允許構造函式呼叫同乙個類的其他建構函式,該建構函式必須放在建構函式初始化列表中使用。

#include

using

namespace std;

classaa

(int ii):a

()void

show()

private

:int i =5;

string str =

"初始值";}

;int

main()

使用委託建構函式時,注意不要形成遞迴委託。例如:

#include

using

namespace std;

classaa

(int ii):a

("ok"

)/* a(string) 和 a(int) 建構函式就形成了遞迴委託*/

void

show()

private

:int i=

5;

string str=

"初始值";}

;int

main()

包含遞迴委託的**程式編譯正常,但是在執行時會崩潰(記憶體問題)。

C 11 繼承建構函式和委託建構函式

如果基類的建構函式很多,那麼子類的建構函式想要實現同樣多的構造介面必須一一呼叫基類的建構函式,於是c 11 引入繼承建構函式。class a a double indouble,int inint a float infloat,int inint,const char char class b p...

C 11 繼承建構函式

繼承建構函式 基類有多個不同版本的建構函式,子類必須對應建構函式來進行 透傳 如 class base base double d,int i void fun float d class derived public base derived double d,int i base d,i voi...

c 11 繼承構造

define crt secure no warnings include include include include c 11允許派生類繼承基類的建構函式 預設建構函式 複製建構函式 移動建構函式除外 注意 繼承的建構函式只能初始化基類中的成員變數,不能初始化派生類的成員變數 如果基類的建構函...