計(jì)算機(jī)二級(jí)考試《C》復(fù)習(xí)資料類的轉(zhuǎn)換_第1頁(yè)
計(jì)算機(jī)二級(jí)考試《C》復(fù)習(xí)資料類的轉(zhuǎn)換_第2頁(yè)
計(jì)算機(jī)二級(jí)考試《C》復(fù)習(xí)資料類的轉(zhuǎn)換_第3頁(yè)
計(jì)算機(jī)二級(jí)考試《C》復(fù)習(xí)資料類的轉(zhuǎn)換_第4頁(yè)
計(jì)算機(jī)二級(jí)考試《C》復(fù)習(xí)資料類的轉(zhuǎn)換_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——計(jì)算機(jī)二級(jí)考試《C》復(fù)習(xí)資料類的轉(zhuǎn)換計(jì)算機(jī)二級(jí)考試《C++》復(fù)習(xí)資料:類的轉(zhuǎn)換

C++的內(nèi)部數(shù)據(jù)類型遵循隱式類型轉(zhuǎn)換規(guī)矩。為扶助考生們快速掌管相關(guān)學(xué)識(shí)點(diǎn),以下是我探尋整理的計(jì)算機(jī)二級(jí)考試《C++》復(fù)習(xí)資料:類的轉(zhuǎn)換,供參考復(fù)習(xí),夢(mèng)想對(duì)大家有所扶助!想了解更多相關(guān)信息請(qǐng)持續(xù)關(guān)注我們我!

假設(shè)某個(gè)表達(dá)市中使用了一個(gè)短整型變量,而編譯器根據(jù)上下文認(rèn)為這兒需要是的長(zhǎng)整型,那么編譯器就會(huì)根據(jù)類型轉(zhuǎn)換規(guī)矩自動(dòng)把它轉(zhuǎn)換成長(zhǎng)整型,這種隱式轉(zhuǎn)換展現(xiàn)在賦值、參數(shù)傳遞、返回值、初始化和表達(dá)式中。我們也可以為類供給相應(yīng)的轉(zhuǎn)換規(guī)矩。

一、轉(zhuǎn)換構(gòu)造函數(shù)

當(dāng)一個(gè)構(gòu)造函數(shù)僅有一個(gè)參數(shù),且該參數(shù)是不同于該類的一個(gè)數(shù)據(jù)類型,這樣的構(gòu)造函數(shù)就叫轉(zhuǎn)換構(gòu)造函數(shù)。轉(zhuǎn)換構(gòu)造函數(shù)把別的數(shù)據(jù)類型的對(duì)象轉(zhuǎn)換為該類的一個(gè)對(duì)象。和其他構(gòu)造函數(shù)一樣,假設(shè)聲明類的對(duì)象的初始化表同轉(zhuǎn)換構(gòu)造函數(shù)的參數(shù)表相匹配,該函數(shù)就會(huì)被調(diào)用。當(dāng)在需要使用該類的地方使用了別的數(shù)據(jù)類型,低廉器就會(huì)調(diào)用轉(zhuǎn)換構(gòu)造函數(shù)舉行轉(zhuǎn)換。

#includeiostream.h

#includetime.h

#includestdio.h

classDate

intmo,da,yr;

public:

Datetime_t;

voiddisplay;

;

voidDate::display

charyear[5];

ifyr10

sprintfyear,0%d,yr;

else

sprintfyear,%d,yr;

cout

Date::Datetime_tnow

tm*tim=localtimenow;

da=tim-tm_mday;

mo=tim-tm_mon+1;

yr=tim-tm_year;

ifyr=100yr-=100;

intmain

time_tnow=time0;

Datedtnow;

dt.display;

return0;

本程序先調(diào)用time函數(shù)來(lái)獲取當(dāng)前時(shí)間,并把它賦給time_t對(duì)象;然后程序通過(guò)調(diào)用Date類的轉(zhuǎn)換構(gòu)造函數(shù)來(lái)創(chuàng)造一個(gè)Date對(duì)象,該對(duì)象由time_t對(duì)象轉(zhuǎn)換而來(lái)。time_t對(duì)象先傳遞給localtime函數(shù),然后返回一個(gè)指向tm布局time.h文件中聲明的指針,然后構(gòu)造函數(shù)把布局中的日月年的數(shù)值拷貝給Date對(duì)象的數(shù)據(jù)成員,這就完成了從time_t對(duì)象到Date對(duì)象的轉(zhuǎn)換。

二、成員轉(zhuǎn)換函數(shù)

成員轉(zhuǎn)換函數(shù)把該類的對(duì)象轉(zhuǎn)換為其他數(shù)據(jù)類型的對(duì)象。在成員轉(zhuǎn)換函數(shù)的聲明中要用到關(guān)鍵字operator。這樣聲明一個(gè)成員轉(zhuǎn)換函數(shù):

operatoraaa;

在這個(gè)例子中,aaa就是要轉(zhuǎn)換成的數(shù)據(jù)類型的說(shuō)明符。這里的類型說(shuō)明符可以是任何合法的C++類型,包括其他的類。如下來(lái)定義成員轉(zhuǎn)換函數(shù);

Classname::operatoraaa

類名標(biāo)識(shí)符是聲領(lǐng)略該函數(shù)的類的`類型說(shuō)明符。上面定義的Date類并不能把該類的對(duì)象轉(zhuǎn)換回time_t型變量,但可以把它轉(zhuǎn)換成一個(gè)長(zhǎng)整型值,計(jì)算從2000年1月1日到現(xiàn)在的天數(shù)。

#includeiostream.h

classDate

intmo,da,yr;

public:

Dateintm,intd,intymo=m;da=d;yr=y;

operatorint;//聲明

;

Date::operatorint//定義

staticintdys[]=31,28,31,30,31,30,31,31,30,31,30,31;

intdays=yr-2000;

days*=365;

days+=yr-2000/4;

forinti=0;idays+=dys[i];

days+=da;

returndays;

intmain

Datenow12,24,2022;

intsince=now;

coutreturn0;

三、類的轉(zhuǎn)換

上面兩個(gè)例子都是C++類對(duì)象和內(nèi)部數(shù)據(jù)對(duì)象之間的相互轉(zhuǎn)換。也可以定義轉(zhuǎn)換函數(shù)來(lái)實(shí)現(xiàn)兩個(gè)類對(duì)象之間的相互轉(zhuǎn)換。

#includeiostream.h

classCustomDate

public:

intda,yr;

CustomDateintd=0,inty=0da=d;yr=y;

voiddisplay

cout

;

classDate

intmo,da,yr;

public:

Dateintm=0,intd=0,inty=0mo=m;da=d;yr=y;

DateconstCustomDate;//轉(zhuǎn)換構(gòu)造函數(shù)

operatorCustomDate;//成員轉(zhuǎn)換函數(shù)

voiddisplay

cout

;

staticintdys[]=31,28,31,30,31,30,31,31,30,31,30,31;

Date::DateconstCustomDatejd

yr=jd.yr;

da=jd.da;

formo=0;mo11;mo++

ifdadys[mo]da-=dys[mo];

elsebreak;

mo++;

Date::operatorCustomDate

CustomDatecd0,yr;

forinti=0;icd.da+=da;

returncd;

intmain

Datedt12,24,3;

CustomDatecd;

cd=dt;//調(diào)用成員轉(zhuǎn)換函數(shù)

cd.display;

dt=cd;//調(diào)用轉(zhuǎn)換構(gòu)造函數(shù)

dt.display;

return0;

這個(gè)例子中有兩個(gè)類CustomDate和Date,CustomDate型日期包含年份和天數(shù)。

這個(gè)例子沒(méi)有考慮閏年處境。但是在實(shí)際構(gòu)造一個(gè)類時(shí),理應(yīng)考慮到全體問(wèn)題的可能性。

在Date里中具有兩種轉(zhuǎn)換函數(shù),這樣,當(dāng)需要從Date型變?yōu)镃ustomDate型十,可以調(diào)用成員轉(zhuǎn)換函數(shù);反之可以調(diào)用轉(zhuǎn)換構(gòu)造函數(shù)。

不能既在Date類中定義成員轉(zhuǎn)換函數(shù),又在CustomDate類里定義轉(zhuǎn)換構(gòu)造函數(shù)。那樣編譯器在舉行轉(zhuǎn)換時(shí)就不知道該調(diào)用哪一個(gè)函數(shù),從而出錯(cuò).

四、轉(zhuǎn)換函數(shù)的調(diào)用

C++里調(diào)用轉(zhuǎn)換函數(shù)有三種形式:第一種是隱式轉(zhuǎn)換,例如編譯器需要一個(gè)Date對(duì)象,而程序供給的是CustomDate對(duì)象,編譯器會(huì)自動(dòng)調(diào)用適合的轉(zhuǎn)換函數(shù)。另外兩種都是需要在程序代碼中明確給出的顯式轉(zhuǎn)換。C++強(qiáng)制類型轉(zhuǎn)換是一種,還有一種是顯式調(diào)用轉(zhuǎn)換構(gòu)造函數(shù)和成員轉(zhuǎn)換函數(shù)。下面的程序給出了三中轉(zhuǎn)換形式:

#includeiostream.h

classCustomDate

public:

intda,yr;

CustomDateintd=0,inty=0da=d;yr=y;

voiddisplay

cout

;

classDate

intmo,da,yr;

public:

Dateintm,intd,inty

mo=m;da=d;yr=y;

operatorCustomDate;

;

Date::operatorCustomDate

staticintdys[]=31,28,31,30,31,30,31,31,30,31,30,31;

CustomDatecd0,yr;

forinti=0;icd.da+=da;

returncd;

intmain

Datedt11,17,89;

CustomDatecd;

cd=dt;

cd.display;

cd=CustomDatedt;

cd.display;

cd=CustomDatedt;

cd.display;

return0;

計(jì)算機(jī)二級(jí)考試《C++》復(fù)習(xí)資料:類的轉(zhuǎn)換

五、轉(zhuǎn)換發(fā)生的情形

上面的幾個(gè)例子都是通過(guò)不能類型對(duì)象之間的相互賦值來(lái)調(diào)用轉(zhuǎn)換函數(shù),還有幾種調(diào)用的可能:

參數(shù)傳遞

初始化

返回值

表達(dá)式語(yǔ)句

這些處境下,都有可能調(diào)用轉(zhuǎn)換函數(shù)。

下面的程序不難理解,就不分析了。

#includeiostream.h

classCustomDate

public:

intda,yr;

CustomDate

CustomDateintd,intyda=d;yr=y;

voiddisplay

cout

;

classDate

intmo,da,yr;

public:

Dateintm,intd,intymo=m;da=d;yr=y;

operatorCustomDate;

;

Date::operatorCustomDate

staticintdys[]=31,28,31,30,31,30,31,31,30,31,30,31;

CustomDatecd0,yr;

forinti=0;icd.da+=da;

returncd;

classTester

CustomDatecd;

public:

explicitTesterCustomDateccd=c;

voiddisplaycd.display;

;

voiddispdateCustomDatecd

cd.display;

CustomDatertndate

Datedt9,11,1;

returndt;

intmain

Datedt12,24,3;

CustomDatecd;

cd=dt;

cd.display;

dispdatedt;

Testertsdt;

ts.display;

cd=rtndate;

cd.display;

return0;

六、顯式構(gòu)造函數(shù)

留神上面Tester類的構(gòu)造函數(shù)前面有一個(gè)explicit修飾符。假設(shè)不加上這個(gè)關(guān)鍵字,那么在需要把CustomDate對(duì)象轉(zhuǎn)換成Tester對(duì)象時(shí),編譯器會(huì)把該函數(shù)當(dāng)作轉(zhuǎn)換構(gòu)造函數(shù)來(lái)調(diào)用。但是有時(shí)候,并不想把這種只有一個(gè)參數(shù)的構(gòu)造函數(shù)用于轉(zhuǎn)換目的,而僅僅夢(mèng)想用它來(lái)顯式地初始化對(duì)象,此時(shí),就需要在構(gòu)造函數(shù)前加explicit。假設(shè)在聲領(lǐng)略Tester對(duì)象以后使用了下面的語(yǔ)句將導(dǎo)致一個(gè)錯(cuò)誤:

ts=jd;//error

這個(gè)錯(cuò)誤說(shuō)明,雖然Tester類中有一個(gè)以Date型變量為參數(shù)的構(gòu)造函數(shù),編譯器卻不會(huì)把它看作是從Date到Tester的轉(zhuǎn)換構(gòu)造函數(shù),由于它的聲明中包含了explicit修飾符。

七、表達(dá)式內(nèi)部的轉(zhuǎn)換

在表達(dá)式內(nèi)部,假設(shè)察覺(jué)某個(gè)類型和需要的不一致,就會(huì)發(fā)生錯(cuò)誤。數(shù)字類型的轉(zhuǎn)換是很簡(jiǎn)樸,這里就不舉例了。下面的程序是把Date對(duì)象轉(zhuǎn)換成長(zhǎng)整型值。

#includeiostream.h

classDate

intmo,da,yr;

public:

Dateintm,intd,inty

mo=m;da=d;yr=y;

operatorlong;

;

Date::operatorlong

staticintdys[]=31,28,31,30,31,30,31,31,30,31,30,31;

longda

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論