c++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)

c++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)

ID:35938653

大小:589.93 KB

頁數(shù):12頁

時間:2019-04-26

c++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)_第1頁
c++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)_第2頁
c++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)_第3頁
c++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)_第4頁
c++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)_第5頁
資源描述:

《c++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、實(shí)用文案C++構(gòu)造函數(shù)詳解及顯式調(diào)用構(gòu)造函數(shù)c++類的構(gòu)造函數(shù)詳解一、構(gòu)造函數(shù)是干什么的classCounter{public://類Counter的構(gòu)造函數(shù)//特點(diǎn):以類名作為函數(shù)名,無返回類型Counter(){m_value=0;}private://數(shù)據(jù)成員intm_value;}該類對象被創(chuàng)建時,編譯系統(tǒng)對象分配內(nèi)存空間,并自動調(diào)用該構(gòu)造函數(shù)->由構(gòu)造函數(shù)完成成員的初始化工作eg:Counterc1;編譯系統(tǒng)為對象c1的每個數(shù)據(jù)成員(m_value)分配內(nèi)存空間,并調(diào)用構(gòu)造函數(shù)Counter()自動地初始化對象c1的m_value值設(shè)置為0故:構(gòu)造函數(shù)的作用:

2、初始化對象的數(shù)據(jù)成員。二、構(gòu)造函數(shù)的種類classComplex{private:doublem_real;doublem_imag;public://無參數(shù)構(gòu)造函數(shù)//如果創(chuàng)建一個類你沒有寫任何構(gòu)造函數(shù),則系統(tǒng)會自動生成默認(rèn)的無參構(gòu)造函數(shù),函數(shù)為空,什么都不做//只要你寫了一個下面的某一種構(gòu)造函數(shù),系統(tǒng)就不會再自動生成這樣一個默認(rèn)的構(gòu)造函數(shù),如果希望有一個這樣的無參構(gòu)造函數(shù),則需要自己顯示地寫出來Complex(void){m_real=0.0;m_imag=0.0;}//一般構(gòu)造函數(shù)(也稱重載構(gòu)造函數(shù))//標(biāo)準(zhǔn)文檔實(shí)用文案一般構(gòu)造函數(shù)可以有各種參數(shù)形式,一個類可以有

3、多個一般構(gòu)造函數(shù),前提是參數(shù)的個數(shù)或者類型不同(基于c++的重載函數(shù)原理)//例如:你還可以寫一個Complex(intnum)的構(gòu)造函數(shù)出來//創(chuàng)建對象時根據(jù)傳入的參數(shù)不同調(diào)用不同的構(gòu)造函數(shù)Complex(doublereal,doubleimag){m_real=real;m_imag=imag;}//復(fù)制構(gòu)造函數(shù)(也稱為拷貝構(gòu)造函數(shù))//復(fù)制構(gòu)造函數(shù)參數(shù)為類對象本身的引用,用于根據(jù)一個已存在的對象復(fù)制出一個新的該類的對象,一般在函數(shù)中會將已存在對象的數(shù)據(jù)成員的值復(fù)制一份到新創(chuàng)建的對象中//若沒有顯示的寫復(fù)制構(gòu)造函數(shù),則系統(tǒng)會默認(rèn)創(chuàng)建一個復(fù)制構(gòu)造函數(shù),但當(dāng)類中有指針

4、成員時,由系統(tǒng)默認(rèn)創(chuàng)建該復(fù)制構(gòu)造函數(shù)會存在風(fēng)險,具體原因請查詢有關(guān)“淺拷貝”、“深拷貝”的文章論述Complex(constComplex&c){//將對象c中的數(shù)據(jù)成員值復(fù)制過來m_real=c.m_real;m_imag=c.m_imag;}//類型轉(zhuǎn)換構(gòu)造函數(shù),根據(jù)一個指定的類型的對象創(chuàng)建一個本類的對象,//需要注意的一點(diǎn)是,這個其實(shí)就是一般的構(gòu)造函數(shù),但是對于出現(xiàn)這種單參數(shù)的構(gòu)造函數(shù),C++會默認(rèn)將參數(shù)對應(yīng)的類型轉(zhuǎn)換為該類類型,有時候這種隱私的轉(zhuǎn)換是我們所不想要的,所以需要使用explicit來限制這種轉(zhuǎn)換。//例如:下面將根據(jù)一個double類型的對象創(chuàng)建了一

5、個Complex對象Complex(doubler){m_real=r;m_imag=0.0;}//等號運(yùn)算符重載(也叫賦值構(gòu)造函數(shù))//注意,這個類似復(fù)制構(gòu)造函數(shù),將=右邊的本類對象的值復(fù)制給等號左邊的對象,它不屬于構(gòu)造函數(shù),等號左右兩邊的對象必須已經(jīng)被創(chuàng)建//若沒有顯示的寫=運(yùn)算符重載,則系統(tǒng)也會創(chuàng)建一個默認(rèn)的=運(yùn)算符重載,只做一些基本的拷貝工作Complex&operator=(constComplex&rhs){//首先檢測等號右邊的是否就是左邊的對象本身,若是本對象本身,則直接返回if(this==&rhs){return*this;}//復(fù)制等號右邊的成員到

6、左邊的對象中this->m_real=rhs.m_real;標(biāo)準(zhǔn)文檔實(shí)用文案this->m_imag=rhs.m_imag;//把等號左邊的對象再次傳出//目的是為了支持連等eg:a=b=c系統(tǒng)首先運(yùn)行b=c//然后運(yùn)行a=(b=c的返回值,這里應(yīng)該是復(fù)制c值后的b對象)return*this;}};下面使用上面定義的類對象來說明各個構(gòu)造函數(shù)的用法:intmain(){//調(diào)用了無參構(gòu)造函數(shù),數(shù)據(jù)成員初值被賦為0.0Complexc1,c2;//調(diào)用一般構(gòu)造函數(shù),數(shù)據(jù)成員初值被賦為指定值Complexc3(1.0,2.5);//也可以使用下面的形式Complexc3=C

7、omplex(1.0,2.5);//把c3的數(shù)據(jù)成員的值賦值給c1//由于c1已經(jīng)事先被創(chuàng)建,故此處不會調(diào)用任何構(gòu)造函數(shù)//只會調(diào)用=號運(yùn)算符重載函數(shù)c1=c3;//調(diào)用類型轉(zhuǎn)換構(gòu)造函數(shù)//系統(tǒng)首先調(diào)用類型轉(zhuǎn)換構(gòu)造函數(shù),將5.2創(chuàng)建為一個本類的臨時對象,然后調(diào)用等號運(yùn)算符重載,將該臨時對象賦值給c1c2=5.2;//調(diào)用拷貝構(gòu)造函數(shù)(有下面兩種調(diào)用方式)Complexc5(c2);Complexc4=c2;//注意和=運(yùn)算符重載區(qū)分,這里等號左邊的對象不是事先已經(jīng)創(chuàng)建,故需要調(diào)用拷貝構(gòu)造函數(shù),參數(shù)為c2//這一點(diǎn)特別重要,這兒是初始化,不

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。