C++類型轉換(類型轉換函數+類型構造函數)


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 其他類型 --> 轉換構造函數 -->類類型

轉換構造函數的形式一般如下:

類型名(其他類型名 變量名);
  1. 轉換構造函數也是一種構造函數,遵循構造函數的一般規則。轉換構造函數只有一個參數,作用就是將其他數據類型轉換成本類類型。但是有一個參數的構造函數不一定是轉換構造函數,它可以是普通的構造函數,僅僅起到對象初始化的作用。
  2. 轉換構造函數不僅可以將標准類型轉換成它所在類的類型,還可以將其他類類型轉換成本類型(這里沒有涉及)。
class AB{
    int x; 
    char y;
    public:
    	AB(int a):x(a){//這個是構造函數,不是轉換構造函數,因為轉換構造函數沒有成員初始化列表
            y='y';
        }
    	AB(int n){ //這個是轉換構造函數
            x=n;
            y='y';
		}
}
AB tmp=2;//這里就會調用轉換構造函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM