C++自定義數據類型與標準數據類型的轉換 講解及實現

類型轉換爲編程提供了方便的接口,c++的標準數據類型已經預設了一些轉換,比如你可以使用 int a = 1.0 來將一個浮點型的數據轉換爲整數,可是對於那些我們自定義的數據類型,就沒有那麼方便了,所以需要我們自己實現

標準類型轉換爲自定義類型

將標準數據類型(比如int,float,double)轉換爲我們自定義的數據類型,我們希望用 a = b 這種語句來操作,有兩種實現方式

  1. 創造帶標準數據類型形參的構造函數
  2. 重載=運算符

創建帶標準數據類型形參的構造函數

這種方法適用於單個形參的情況,使用以下的代碼,創建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;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章