




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023一年級(jí)數(shù)學(xué)上冊(cè) 八 10以內(nèi)的加法和減法第10課時(shí) 求未知加數(shù)教學(xué)實(shí)錄 蘇教版
- 視頻播放控制簡(jiǎn)化觀看流程
- 2024-2025學(xué)年新教材高中物理 第一章 動(dòng)量守恒定律 1 動(dòng)量教學(xué)實(shí)錄 新人教版選擇性必修第一冊(cè)
- 2《祖父的園子》教學(xué)設(shè)計(jì)-2023-2024學(xué)年統(tǒng)編版五年級(jí)語(yǔ)文下冊(cè)
- 10 我們當(dāng)?shù)氐娘L(fēng)俗 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治四年級(jí)下冊(cè)統(tǒng)編版
- 2024-2025學(xué)年高中歷史 專題八 日本明治維新 三 迅速崛起的日本(2)教學(xué)教學(xué)實(shí)錄 人民版選修1
- 2023-2024學(xué)年泰山版信息技術(shù)(2018)第五冊(cè) 《第三單元 創(chuàng)作動(dòng)畫(huà)故事 10 笑臉?biāo)透1硇脑浮方虒W(xué)設(shè)計(jì)
- 2024年五年級(jí)語(yǔ)文上冊(cè) 第四單元 12 古詩(shī)三首 示兒教學(xué)實(shí)錄 新人教版
- 體育與健康七年級(jí)初中前滾翻教學(xué)設(shè)計(jì)
- 《阿里山的姑娘》教學(xué)設(shè)計(jì)
- 馬達(dá)檢測(cè)報(bào)告
- 拼音瘋狂背古詩(shī)(6個(gè)單元120首)
- 閱讀讓我們更聰明
- 牙周病科普講座課件
- 實(shí)驗(yàn)室安全專項(xiàng)培訓(xùn)
- 工業(yè)地產(chǎn)營(yíng)銷推廣方案
- 2024年貴州能源集團(tuán)電力投資有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 電子產(chǎn)品設(shè)計(jì)案例教程(微課版)-基于嘉立創(chuàng)EDA(專業(yè)版) 課件 第3章 多諧振蕩器的PCB設(shè)計(jì)
- 鐵路軌道與修理
- 紡織行業(yè)清潔生產(chǎn)評(píng)價(jià)指標(biāo)體系色紗
- 管理能力測(cè)試題大全
評(píng)論
0/150
提交評(píng)論