類型轉換爲編程提供了方便的接口,c++的標準數據類型已經預設了一些轉換,比如你可以使用 int a = 1.0
來將一個浮點型的數據轉換爲整數,可是對於那些我們自定義的數據類型,就沒有那麼方便了,所以需要我們自己實現
標準類型轉換爲自定義類型
將標準數據類型(比如int,float,double)轉換爲我們自定義的數據類型,我們希望用 a = b
這種語句來操作,有兩種實現方式
- 創造帶標準數據類型形參的構造函數
- 重載
=
運算符
創建帶標準數據類型形參的構造函數
這種方法適用於單個形參的情況,使用以下的代碼,創建cat對象,cat對象擁有age屬性,通過帶int參數的構造函數,我們可以直接實現 cat c = 123;
這種匪夷所思的操作,不僅不會報錯,還能正常執行
#include <bits/stdc++.h>
using namespace std;
class cat
{
public:
int age;
cat(){}
cat(int x){age=x;}
};
int main()
{
cat c = 2;
cout<<c.age;
return 0;
}
重載 = 運算符
我們運行 cat c = 2;
本質上是調用 = 的運算符,如果我們改寫這個運算符,那麼就可以實現對於不同數據類型的平滑轉換
注意該方法會覆蓋默認的 =
運算符,可能導致cat對象之間不能用=
號賦值,所以在重載的同時,爲了保險起見,我們還要從新寫一個默認的=
運算符的函數(但是實際上編譯能夠通過也能正常執行)
#include <bits/stdc++.h>
using namespace std;
class cat
{
public:
int age;
cat(){}
// 保險起見要提供默認的 = 號
cat& operator = (const cat& c2){age=c2.age; return *this;}
// 重載 = 運算符
cat& operator = (const int& x){age=x; return *this;}
};
int main()
{
cat c1,c2;
c1 = 2;
c2 = 123;
cout<<c1.age<<endl;
cout<<c2.age<<endl;
c2 = c1;
cout<<c2.age<<endl;
return 0;
}
自定義數據類型轉爲標準數據類型
自定義數據類型轉爲標準數據類型,需要提供強轉成員函數,格式如下
operator 類型名();
無返回類型,以operator打頭,然後是返回的標準數據類型名,然後括號,括號裏面不能填寫任何內容,但是函數體最後需要返回值,這個返回值必須和上面填的類型名一致,而且這個強轉函數必須是非靜態的
比如填寫一個cat對象轉爲int對象的強轉函數,應該這麼聲明:
class cat
{
public:
int age;
cat(){age=123;}
operator int(){return age;}
};
執行以下代碼可以實現:
#include <bits/stdc++.h>
using namespace std;
class cat
{
public:
int age;
cat(){age=123;}
operator int(){return age;}
};
int main()
{
cat c;
int cat_age = c;
cout<<cat_age;
return 0;
}