一般來說,類對象的類型轉(zhuǎn)換可由構(gòu)造函數(shù)和轉(zhuǎn)換函數(shù)說明。這種轉(zhuǎn)換常稱為用戶定義的類型轉(zhuǎn)換或類類型轉(zhuǎn)換。C++支持四種類型轉(zhuǎn)換,標(biāo)準(zhǔn)類型-》標(biāo)準(zhǔn)類型,標(biāo)準(zhǔn)類型-->類類型,類類型-->標(biāo)準(zhǔn)類型,類類型-->類類型。標(biāo)注類型是除了class,struct,union之外的所有其他類型。 1.標(biāo)準(zhǔn)類型轉(zhuǎn)換為類類型 可通過自定義重載賦值號“=”和構(gòu)造函數(shù)實(shí)現(xiàn) #include <iostream> #include <stdlib.h> #include <string.h>
using namespace std;
class INTEGER { int num; public: INTEGER(int i); INTEGER(const char *str); void mem_fun(INTEGER anint); };
INTEGER::INTEGER(int i) { num = i; }
INTEGER::INTEGER(const char *str) { num = strlen(str); }
void INTEGER::mem_fun(INTEGER anint) { num = anint.num; }
int main(int argc,char *argv[]) { INTEGER obj1 = INTEGER(1); INTEGER obj2 = "Beijing"; int anint = 10; INTEGER obj3 = INTEGER(anint); obj1 = 20;//隱式轉(zhuǎn)換,將1轉(zhuǎn)換為INTEGER型,obj1.operator=(INTEGER(20));編譯器嘗試用構(gòu)造函數(shù)去實(shí)現(xiàn)轉(zhuǎn)換。 obj2.mem_fun(3);//同上,將3->INTEGER cout << "Application Run Successfully!" << endl; return 0; } 2.類類型轉(zhuǎn)換 帶一個參數(shù)的構(gòu)造函數(shù)可以進(jìn)行類型轉(zhuǎn)換,但這樣的轉(zhuǎn)換功能收到限制。因此需要引入一種特殊的成員函數(shù):類型轉(zhuǎn)換函數(shù),他在類對象之間提供一種類似顯示類型轉(zhuǎn)的機(jī)制。格式: Class_Name::operator type() { ...... return (type類型實(shí)例); } 類型轉(zhuǎn)換函數(shù)不能被重載,沒有參數(shù),沒有返回值,但必須有一條返回語句返回一個type實(shí)例。 如:類類型轉(zhuǎn)換為整形 #include <iostream> #include <stdlib.h> #include <string.h>
using namespace std;
class INTEGER { int num; public: INTEGER(int i=0) { num = i; } operator int() { return num; } };
int main(int argc,char *argv[]) { INTEGER obj(12); int i = int(obj); cout << i << endl; i = (int)obj; cout << i << endl; i = obj; cout << i << endl; cout << "Application Run Successfully!" << endl; return 0; } 如:類類型轉(zhuǎn)換為類類型 定義一個類integer,它可以處理32位整數(shù),同時定義另一個類real,它可以處理32位實(shí)數(shù)。
|