(注意:經(jīng)測試,VS2010 不支持該特性)
C++0x帶來的委托構(gòu)造函數(shù)(delegate constructor),說白了,其實就是在某一個構(gòu)造函數(shù)中調(diào)用另外一個構(gòu)造函數(shù),實際上,類似的特性在Java中早已經(jīng)存在了,好像就是在構(gòu)造函數(shù)之后跟上Base()來實現(xiàn)的。
委托構(gòu)造函數(shù)確實能夠帶來一些便利,常常,我們需要在兩個相類似的構(gòu)造函數(shù)中實現(xiàn)相同的功能,在以往,我們也許會通過將這些相同的功能集中到一個init()中來實現(xiàn),兩個構(gòu)造函數(shù)調(diào)用同一個函數(shù)。現(xiàn)在C++0x有了委托構(gòu)造函數(shù),我們可以將這些相同的功能在某個基礎(chǔ)的構(gòu)造函數(shù)中實現(xiàn),另外一個構(gòu)造函數(shù)調(diào)用這個基礎(chǔ)構(gòu)造函數(shù)就可以了。一個簡單的例子是:
#include <iostream> using namespace std; // 正數(shù)類 class PositiveNumber { public: // 帶參數(shù)的構(gòu)造函數(shù),附帶了對參數(shù)進行檢查的功能 PositiveNumber(int x) { if( x < 0) throw "必須為正數(shù)"; _x = x; } // 不帶參數(shù)的默認構(gòu)造函數(shù),以1為參數(shù)委托調(diào)用帶參數(shù)的構(gòu)造函數(shù) PositiveNumber(): Positive{1} {}
private: int _x; };
int main(int argc, char *argv[]) { PositiveNumber one; PositiveNumber two(2); return 0; }
委托構(gòu)造函數(shù),省去了為了實現(xiàn)共同功能需要另外的intit()函數(shù),為編碼帶來了便利。 轉(zhuǎn)自: http://blog.csdn.net/shellching/archive/2010/04/20/5506019.aspx
|