C 轉換函式

2021-10-08 02:30:44 字數 1895 閱讀 6318

轉換函式分為兩種:

1、自己定義的類通過轉換函式轉換為其他型別

2、其他型別通過轉換函式(類建構函式)轉換為自己定義的類

形式:1、operator typename(){};

條件:①轉換函式必須為類方法

②轉換函式不能指定返回型別

③轉換函式不能有引數;

例子:

#define conv_fun_h

#include

"stdafx.h"

#include

//這裡寫乙個將分數轉化為小數的轉換函式

class

fraction

//可以把這種東西轉化為別的東西

operator

double()

const};

#endif

// !conv_fun_h

#include

"stdafx.h"

#include

#include

"conv_fun.h"

using

namespace std;

intmain()

結果:

2、建構函式轉換

包含顯示轉換和隱士轉換。

顯式轉換可以有多個輸入引數,而隱式轉換只能有乙個

例如:有乙個類mycat中的建構函式為

stonewet(double a,double b=0);//這裡可以只有乙個傳入引數,因為有乙個預設的;

顯式轉換: mycat tom(0.5,34.0);

隱式轉換:mycat tom = 0.5;//這裡編譯器會去類中找是否有個建構函式只傳入乙個double引數,於是找到了,那麼久建立了物件。

問題:有是因為這種隱式轉換可能會帶來二義性的麻煩,為了解決這個問題,引入了乙個關鍵字explicit用於建構函式之前,限定了這種建構函式只能顯式轉換,不能隱士轉換。

#define conv_fun_h

#include

"stdafx.h"

#include

//這裡寫乙個將分數轉化為小數的轉換函式

class

fraction

//可以把這種東西轉化為別的東西

fraction operator

+(cosnt fraction& f)

operator

double()

const};

#endif

// !conv_fun_h

fraction f(3

,5);

fraction d2 = f+4;

//這裡就會出問題,即ambiguous,因為f後面的+在類中進行了過載,而4就會傳入過載函式中

//而過載函式傳入的引數為fraction型別,所以編譯器就會想用建構函式轉換為fraction型別,但是左邊的d2是

//宣告了fraction,直接用的fraction,所以編譯器此時不知道該怎麼轉換,所以要引入explict

explicit

fraction

(int num,

int den =1)

:m_numerator

(num)

,m_denominator

(den)

//加了explicit(明白的)就告訴編譯器不會**轉換

小結:使用explicit限定了這種建構函式(只接受乙個引數),則它只能用於顯示轉換,否則有也可以用於隱士轉換。

C 轉換函式

在c 中,可以利用建構函式將乙個int型變數轉換為乙個類物件,如cmyclass aclass 5 有人便會問,可以進行相反的轉換嗎?例如將乙個類物件轉換為乙個int值,int ntemp aclass c 可以實現這一需求.但不是建構函式.建構函式只能用於某種型別到類型別的轉換.要進行相反的轉換,...

c 轉換函式

1.轉換函式三要素1.轉換函式必須是類方法 2.轉換函式不能指定返回型別 3.轉換函式不能有引數 2.函式demon include using namespace std class stonewt int stone double pds left double pounds public st...

C 轉換建構函式和轉換函式

1 轉換建構函式的作用 作用 將某種型別轉換為類型別 例如有下面的 base int a 轉換建構函式 base b 物件 b 12 解析 程式將使用建構函式base int a 構造出乙個臨時的無名base物件,並用12對其初始化。然後採用逐個成員賦值的方式將該臨時物件的內容賦值給物件b。這一過程...