0.問題:類類型是否能夠類型轉換到普通類型?
1.類型轉換函數
C++類中可以定義類型轉換函數,其作用是將類對象轉換為其它類型。如法規則如下:
operator Type ()
{
Type ret;
// ...
return ret;
}
編程說明:類型轉換函數的初探
#include <iostream>
#include <string>
using namespace std;
class Test
{
int mValue;
public:
Test()
{
}
Test(int i = 0)
{
mValue = i;
}
int value()
{
return mValue;
}
operator int () // 類型轉換函數
{
int ret = mValue;
return ret;
}
};
int main()
{
Test t(1);
int i = t; // ==> i = t.operator int (); 相當于隱式調用了類型轉換函數
cout << "t.value() = " << t.value() << endl;
cout << "i = " << i << endl;
return 0;
}
輸出結果:
t.value() = 1
i = 1
- 類型轉化函數與轉換構造函數具有同等的地位,它使得編譯器有能力將對象轉化為其它類型,編譯器能夠隱式的使用類型轉換函數。
2. 類與類之間的相互轉換
編程說明:類類型之間的轉換
#include <iostream>
#include <string>
using namespace std;
class Test;
class Value
{
int mValue;
public:
Value()
{
}
explicit Value(Test& t)
{
cout << "explicit Value(Test& t) : " << endl;
}
int value()
{
return mValue;
}
};
class Test
{
int mValue;
public:
Test()
{
}
Test(int i = 0)
{
mValue = i;
}
int value()
{
return mValue;
}
operator Value () // 類型轉換函數
{
Value ret;
cout << "operator Value ():" << endl;
return ret;
}
};
int main()
{
Test t1(1);
Test t2(2);
Value v1 = t1; // 隱式調用時通過Test類中的類型轉換函數
Value v2 = (Value)t2; // 顯示調用時通過Value類中的轉換構造函數
return 0;
}
輸出結果
operator Value ():
explicit Value(Test& t) :
3. 類型轉換函數
- 無法抑制隱式的類型轉換函數調用
- 類型轉換函數可能與轉換構造函數沖突
- 工程中以
Type toType()
的公有成員代替類型轉換函數,如int toInt();
4.小結
- C++類中可以定義類型轉換函數
- 類型轉換函數用于將類對象轉換為其它類型
- 類型轉換函數與轉換構造函數具有同等的地位,編譯器都可以隱式的調用,當同時定義了這兩個函數,編譯器隱式調用時就會報錯(編譯器無法選擇這兩個函數用哪一個)
- 工程中以
Type to Type()
的公有成員代替類型轉換函數