委託構造函數

委託構造函數
C++11新標準擴展了構造函數初始值的功能,使得咱們能夠定義所謂的委託構造函數。一個委託構造函數使用它所屬類的其餘構造函數執行它本身的初始化過程,或者說它把它本身的一些(或者所有)指責委託給了其餘構造函數。
和其餘構造函數同樣,一個委託構造函數也有一個成員初始值的列表和一個函數體。在委託構造函數體內,成員初始值列表只有一個惟一的入口,就是類名自己。和其餘成員初始值同樣,類名後面緊跟圓括號括起來的參數列表,參數列表必須與類中另一個構造函數匹配。
舉個例子,咱們使用委託構造函數重寫Sales_data類,重寫後的形式以下所示:函數

class Sales_data{
public:
//非委託構造函數使用對應的實參初始化成員
Sales_data(std::string s,unsigned cnt,double price):bookNo(s),units_sold(cnt),revenue(price*cnt){}this

//其他構造函數全都委託給另外一個構造函數
Sales_data():Sales_data("",0,0){}string

Sales_data(std::string s):Sales_data(s,0,0){}it

Sales_data(std::istream &is):Sales_data()
{
read(is,*this);
}class

//其餘成員與以前的版本一致stream

};擴展

在這個Sales_data類中,除了一個構造函數外其餘的都委託了他們的工做。第一個構造函數接收三個實參,使用這些實參初始化數據成員,而後結束工做。咱們定義默認構造函數令其使用三參數的構造函數完成初始化過程,它也無需執行其餘任務,這一點從空的構造函數體能看出來。接受一個string的構造函數一樣委託給了三參數的版本。
接收istream&的構造函數也是委託構造函數,它委託給了默認構造函數,默認構造函數又接着委託給三參數構造函數。當這些受委託的構造函數執行完後,接着執行istream&構造函數體的內容。它的構造函數體調用read函數讀取給定的istream。
當一個構造函數委託給另外一個構造函數時,受委託的構造函數的初始值列表和函數體被依次執行。在Sales_data類中,受委託的構造函數體剛好是空的。假如函數體包含有代碼的話,將先執行這些代碼,而後控制權纔會交還給委託者的函數體。構造函數

相關文章
相關標籤/搜索