C++類型轉換(類型轉換函數+類型構造函數)
類型轉換函數
類型轉換運算符是類的一種特殊成員函數,它負責將一個類類型的值轉換成其他類型。
graph LR 類類型--> 類型轉換函數 --> 其他類型
類型轉換函數的一般形式如下所示:
operator type()const;//類型轉換運算符通常不會改變轉換對象的內容,所以它一般被定義成 const 類型
其中type
表示某種類型。類型轉換運算符可以面向任意類型(除了void
之外)進行定義,只要該類型能作為函數的趕回類型。因此我們不允許轉換成數組或者函數類型,但是允許轉換成指針(包括數組指針及函數指針)或者引用類型。
類型轉換運算符既沒有顯式的返回類型,也沒有形參,而且必須定義成類的成員函數。
例如:
class AB{
int x;
char y;
public:
AB(int a, char b):x(a), y(b){}
operator char(){
return y;
}
operator int(){
return x;
}
}
AB tmp(1, 1.2);
ans=1+tmp; //ans將會被賦值為2,這里會把tmp轉換成int類型,也就是調用了operator int()函數。
轉換構造函數
轉換構造函數是把其他的類型轉換為該構造函數所在的類類型。
graph LR 其他類型 --> 轉換構造函數 -->類類型
轉換構造函數的形式一般如下:
類型名(其他類型名 變量名);
- 轉換構造函數也是一種構造函數,遵循構造函數的一般規則。轉換構造函數只有一個參數,作用就是將其他數據類型轉換成本類類型。但是有一個參數的構造函數不一定是轉換構造函數,它可以是普通的構造函數,僅僅起到對象初始化的作用。
- 轉換構造函數不僅可以將標准類型轉換成它所在類的類型,還可以將其他類類型轉換成本類型(這里沒有涉及)。
class AB{
int x;
char y;
public:
AB(int a):x(a){//這個是構造函數,不是轉換構造函數,因為轉換構造函數沒有成員初始化列表
y='y';
}
AB(int n){ //這個是轉換構造函數
x=n;
y='y';
}
}
AB tmp=2;//這里就會調用轉換構造函數