可以把數字或者字符串當做對象賦值給另一個對象,這樣在對該賦值表達式進行計算時,首先要對數字或字符串進行類型轉換,同時判斷該類的構造函數的參數是否類型匹配,假如匹配,則調用該類的構造函數創建一個臨時對象,接着將該臨時對象賦值給操作符左邊的對象,最後調用析構函數刪除臨時對象。
對象的轉換通常分爲兩種:顯式轉換和隱式轉換,如果不希望對象隱式轉換,可以在相應的構造函數前加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;
}
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;
}