C++使用構造函數進行類型轉換

可以把數字或者字符串當做對象賦值給另一個對象,這樣在對該賦值表達式進行計算時,首先要對數字或字符串進行類型轉換,同時判斷該類的構造函數的參數是否類型匹配,假如匹配,則調用該類的構造函數創建一個臨時對象,接着將該臨時對象賦值給操作符左邊的對象,最後調用析構函數刪除臨時對象。

對象的轉換通常分爲兩種:顯式轉換和隱式轉換,如果不希望對象隱式轉換,可以在相應的構造函數前加explicit關鍵字關閉隱式轉換。

1、數字作爲轉換對象

class MyClass
{
public:
	MyClass(int i){a = i;}
	MyClass(){}
	~MyClass(){}
private:
	int a;
};
int main()
{
	//隱式轉換
	//如果帶參構造函數聲明爲explicit MyClass(int i),那麼這種轉換將失敗
	MyClass m = 200;

	//顯式轉換
	//如果帶參構造函數聲明爲explicit MyClass(int i),那麼只能使用這種顯式轉換
	m = MyClass(300);
	return 0;
}


2、字符串作爲對象轉換
class MyClass
{
public:
	explicit MyClass(char *p){::strcpy_s(str, p);}
	MyClass(){}
	~MyClass(){}
private:
	char str[20];
};
int main()
{
	//由於關閉了隱式轉換,所以此方式編譯不過
	//MyClass m = "Helloworld";

	//可以使用顯式轉換
	MyClass m;
	m = MyClass("abcdef");
	return 0;
}

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