C++數(shù)據(jù)類型轉(zhuǎn)換以及轉(zhuǎn)換構(gòu)造函數(shù)
標(biāo)準(zhǔn)數(shù)據(jù)類型之間的轉(zhuǎn)換
在C++中,某些不同類型數(shù)據(jù)之間可以自動轉(zhuǎn)換,例如
int i = 6; i = 7.5 + i;
編譯系統(tǒng)對 7.5是作為double型數(shù)處理的,在求解表達(dá)式時,先將6轉(zhuǎn)換成double型,然后與7.5相加,得到和為13.5,在向整型變量i賦值時,將13.5轉(zhuǎn)換為整數(shù)13,然后賦給i。這種轉(zhuǎn)換是由C++編譯系統(tǒng)自動完成的,用戶不需干預(yù)。這種轉(zhuǎn)換稱為隱式類型轉(zhuǎn)換。
C++還提供顯式類型轉(zhuǎn)換,程序人員在程序中指定將一種指定的數(shù)據(jù)轉(zhuǎn)換成另一指定的類型,其形式為:
類型名(數(shù)據(jù))
如
int(89.5)
其作用是將89.5轉(zhuǎn)換為整型數(shù)89。
以前我們接觸的是標(biāo)準(zhǔn)類型之間的轉(zhuǎn)換,現(xiàn)在用戶自己定義了類,就提出了一個問題:一個自定義類的對象能否轉(zhuǎn)換成標(biāo)準(zhǔn)類型? 一個類的對象能否轉(zhuǎn)換成另外一個類的對象?譬如,能否將一個復(fù)數(shù)類數(shù)據(jù)轉(zhuǎn)換成整數(shù)或雙精度數(shù)?能否將Date類的對象轉(zhuǎn)換成Time類的對象?
對于標(biāo)準(zhǔn)類型的轉(zhuǎn)換,編譯系統(tǒng)有章可循,知道怎樣進(jìn)行轉(zhuǎn)換。而對于用戶自己聲明的類型,編譯系統(tǒng)并不知道怎樣進(jìn)行轉(zhuǎn)換。解決這個問題的關(guān)鍵是讓編譯系統(tǒng)知道怎樣去進(jìn)行這些轉(zhuǎn)換,需要定義專門的函數(shù)來處理。
轉(zhuǎn)換構(gòu)造函數(shù)
轉(zhuǎn)換構(gòu)造函數(shù)(conversion constructor function) 的作用是將一個其他類型的數(shù)據(jù)轉(zhuǎn)換成一個類的對象。這里回顧一下以前學(xué)習(xí)過的幾種構(gòu)造函數(shù):
1) 默認(rèn)構(gòu)造函數(shù)。以Complex類為例,函數(shù)原型的形式為:
Complex( ); //沒有參數(shù)
2) 用于初始化的構(gòu)造函數(shù)。函數(shù)原型的形式為:
Complex(double r, double i); //形參表列中一般有兩個以上參數(shù)
3) 用于復(fù)制對象的復(fù)制構(gòu)造函數(shù)。函數(shù)原型的形式為:
Complex (Complex &c); //形參是本類對象的引用
現(xiàn)在介紹一種新的構(gòu)造函數(shù)――轉(zhuǎn)換構(gòu)造函數(shù)。
轉(zhuǎn)換構(gòu)造函數(shù)只有一個形參,如
Complex(double r) {real=r;imag=0;}
其作用是將double型的參數(shù)r轉(zhuǎn)換成Complex類的對象,將r作為復(fù)數(shù)的實(shí)部,虛部為0。用戶可以根據(jù)需要定義轉(zhuǎn)換構(gòu)造函數(shù),在函數(shù)體中告訴編譯系統(tǒng)怎樣去進(jìn)行轉(zhuǎn)換。
在類體中,可以有轉(zhuǎn)換構(gòu)造函數(shù),也可以沒有轉(zhuǎn)換構(gòu)造函數(shù),視需要而定。以上幾種構(gòu)造函數(shù)可以同時出現(xiàn)在同一個類中,它們是構(gòu)造函數(shù)的重載。編譯系統(tǒng)會根據(jù)建立對象時給出的實(shí)參的個數(shù)與類型選擇形參與之匹配的構(gòu)造函數(shù)。
假如在Complex類中定義了上面的構(gòu)造函數(shù),在Complex類的作用域中有以下聲明語句:
Complex cl(3.5) ; //建立對象cl,由于只有一個參數(shù),調(diào)用轉(zhuǎn)換構(gòu)造函數(shù)
建立Comptex類對象cl,其real(實(shí)部)的值為3.5,imag(虛部)的值為0。它的作用就是將double型常數(shù)轉(zhuǎn)換成一個名為cl的Complex類對象。也可以用聲明語句建立一 個無名的Complex類對象。如
Complex(3.6) ; //用聲明語句建立一個無名的對象,合法,但無法使用它
可以在一個表達(dá)式中使用無名對象,如:
cl =Complex(3.6); //假設(shè)cl巳被定義為Complex類對象
建立一個無名的Complex類對象,其值為(3.6+0i),然后將此無名對象的值
主站蜘蛛池模板:
雷山县|
盖州市|
准格尔旗|
玛多县|
德安县|
建德市|
永嘉县|
大竹县|
武邑县|
怀来县|
旌德县|
安福县|
江川县|
香格里拉县|
前郭尔|
静乐县|
新和县|
家居|
台东县|
波密县|
兴安县|
呼玛县|
镇沅|
桓台县|
凤庆县|
嘉荫县|
电白县|
乳源|
穆棱市|
松原市|
韶山市|
镇远县|
沽源县|
博湖县|
铜梁县|
萍乡市|
金坛市|
博罗县|
永宁县|
固安县|
江西省|