轉換構造函式

在C++中,類的構造函式可以省略不寫,這時C++會為它自動創建一個隱式默認構造函式(implicit default constructor);也可以由用戶定義帶參數的構造函式,構造函式也是一個成員函式,他可以被重載;當一個構造函式只有一個參數,而且該參數又不是本類的const引用時,這種構造函式稱為轉換構造函式。

在C++中,類的構造函式可以省略不寫,這時C++會為它自動創建一個隱式默認構造函式(implicit default constructor);也可以由用戶定義帶參數的構造函式,構造函式也是一個成員函式,他可以被重載;當一個構造函式只有一個參數,而且該參數又不是本類的const引用時,這種構造函式稱為轉換構造函式
例如:
class Complex
{
protected:
double real,vir; //複數的實部和虛部
public:
Complex(double x)
{ real=x,vir=0;}
};
這個構造函式即 轉換構造函式。
如上文。構造函式只有一個參數 double x,它也不是本類的const引用。轉換構造函式套用

1、轉換構造函式一般由系統自動調用(當然代碼里自己調用完全沒問題),這點很利於編程。
例如:Complex t=5.0;//或Complex t(5.0);或Complex t=Complex(5.0);或Complex t=(Complex)5.0;
這時系統就自動調用了 Complex(double x)將 5.0轉換成Complex類,再賦值給 t 。
2、如果定義了 操作符重載函式 Complex operator + (const Copmlex a ,const Complex b);
而且在Complex類中定義了類型轉換函式 operator double() {.....; }。
例如類的聲明如下:
class Complex
{
public:
Complex(){real=0;vir=0;}//構造函式1
Complex(double r){real=r;vir=0;}//構造函式2/轉換構造函式
Complex(double r,double i):real(r),vir(i){}//構造函式3
friend Complex operator + (Complex &c1,Complex &c2);//重載"+"運算符
operator double(){return real;}//類型轉換函式
private:
double real; double vir;
};
//還需在類外定義運算符重載函式operator +如下
Complex operator + (Complex &c1,Complex &c2)
{return Complex(c1.real+c2.real; c1.vir+c2.vir);} 
這時,語句:
Complex b=t + 4.8;
就能直接編譯通過,且4.8和t的位置可互換,即滿足加法交換律,但是當編譯器編譯到這行語句時,不同的編譯器會有不同的反應,有的編譯環境下,如dev c++會把t轉換為double數值,若t=1+1i則執行完此行語句後b=5.8+0i(注意類聲明中的類型轉換函式),此時對運算符+的重載不起作用;而有的編譯器則會自動執行轉換構造函式,把4.8轉換為一個對象即4.8+0i,再與t相加 執行結果為b=5.8+1i,此時對運算符+的重載起作用,因為在類Complex中將運算符重載函式定義為了友元函式,這個函式需要兩個Complex的對象作為參數。

相關詞條

相關搜尋

熱門詞條

聯絡我們