版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2006-11-22關(guān)于構(gòu)造函數(shù)關(guān)于構(gòu)造函數(shù)1.構(gòu)造函數(shù)的位置構(gòu)造函數(shù)的位置2.缺省構(gòu)造函數(shù)缺省構(gòu)造函數(shù)3.拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)4.派生類的構(gòu)造函數(shù)派生類的構(gòu)造函數(shù)5.深拷貝與淺拷貝深拷貝與淺拷貝2006-11-221.構(gòu)造函數(shù)的位置只能放在公有函數(shù)成員的位置:構(gòu)造函數(shù)的位置只能放在公有函數(shù)成員的位置:#include iostream.hclass Aprivate:/或者或者protected也會(huì)出錯(cuò)也會(huì)出錯(cuò)A()public:int i;void main()/主函數(shù)主函數(shù)A a;/cannot access private member declared in class A /
2、see declaration of A:A返返 回回2006-11-221. 自定義缺省構(gòu)造函數(shù):自定義缺省構(gòu)造函數(shù):1.無參數(shù)無參數(shù) 2.帶帶缺省值缺省值2. 系統(tǒng)默認(rèn)構(gòu)造函數(shù)系統(tǒng)默認(rèn)構(gòu)造函數(shù)構(gòu)造函構(gòu)造函數(shù)兩種數(shù)兩種情形情形2.缺省構(gòu)造函數(shù)缺省構(gòu)造函數(shù)2006-11-221. 如果程序中未聲明,系統(tǒng)自動(dòng)產(chǎn)生出一個(gè)缺省形式的構(gòu)造函數(shù)如果程序中未聲明,系統(tǒng)自動(dòng)產(chǎn)生出一個(gè)缺省形式的構(gòu)造函數(shù)2. 缺省構(gòu)造函數(shù)不能超過一個(gè),否則會(huì)有(缺省構(gòu)造函數(shù)不能超過一個(gè),否則會(huì)有(warning or error)返返 回回3.拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)注意一種特殊情形,重載運(yùn)算符注意一種特殊情形,重載運(yùn)算符“=
3、”與拷貝構(gòu)造的關(guān)系與拷貝構(gòu)造的關(guān)系1.當(dāng)沒有重載運(yùn)算符“”時(shí):Point p2p1表示調(diào)用Point類的拷貝構(gòu)造函數(shù),與Point p2(p1)等價(jià); 而 Point p2; p2=p1; 此時(shí)調(diào)用的是C自動(dòng)重載運(yùn)算符函數(shù), 此時(shí)不會(huì)調(diào)用拷貝構(gòu)造函數(shù)。2.當(dāng)重載運(yùn)算符“”時(shí):與1相同,Point p2p1表示調(diào)用Point類的拷貝構(gòu)造函數(shù);而 Point p2; 而 p2=p1; 此時(shí)調(diào)用的是自定義的重載運(yùn)算符函數(shù),即Operator,同時(shí)參數(shù)傳遞和函數(shù)值返回的原因,會(huì)調(diào)用拷貝構(gòu)造函數(shù)兩次。下頁(yè)例子#include iostream.hclass Pointpublic:Point();Poi
4、nt(Point &p);Point operator =(Point p)this-X=p.X;this-Y=p.Y;coutcall the = operator function !endl;return *this;private:int X,Y;Point:Point () cout構(gòu)造函數(shù)被調(diào)用!endl;Point:Point (Point& p)X=p.X;Y=p.Y;cout拷貝構(gòu)造函數(shù)被調(diào)用!endl;void main()Point p1,p2;/Point p2 = p1; 等價(jià)于Point p1(p2); p2=p1;運(yùn)行結(jié)果運(yùn)行結(jié)果返返 回回2006
5、-11-224.派生類的構(gòu)造函數(shù)派生類的構(gòu)造函數(shù)職責(zé)職責(zé):1. 基類成員:基類構(gòu)造函數(shù)完成2. 內(nèi)嵌對(duì)象成員3. 新增成員注意注意:1. 基類構(gòu)造函數(shù),內(nèi)嵌對(duì)象構(gòu)造函數(shù)的局部調(diào)用順序2. 缺省調(diào)用方式舉例舉例2:討論構(gòu)造函數(shù)的調(diào)用次序問題討論構(gòu)造函數(shù)的調(diào)用次序問題class B1/基類B1,構(gòu)造函數(shù)有參數(shù)public:B1(int i) coutconstructing B1 iendl;class B2/基類B2,構(gòu)造函數(shù)有參數(shù)public:B2(int j) coutconstructing B2 jendl;class B3/基類B3,構(gòu)造函數(shù)無參數(shù)public:B3( )coutcon
6、structing B3 *endl;class C: public B2, public B1, public B3 public:C(int a, int b, int c, int d): B1(a),memberB2(d),memberB1(c),B2(b) private:B1 memberB1;B2 memberB2;B3 memberB3;void main( ) C obj(1,2,3,4);認(rèn)真思考并回答其輸出結(jié)果?constructing B2 2constructing B1 1constructing B3 *constructing B1 3constructing
7、B2 4constructing B3 *Press any key to continue返返 回回2006-11-224.深拷貝與淺拷貝深拷貝與淺拷貝1. 淺拷貝只適合當(dāng)對(duì)象中沒有動(dòng)態(tài)資源申請(qǐng)的數(shù)據(jù)對(duì)象,淺拷貝只適合當(dāng)對(duì)象中沒有動(dòng)態(tài)資源申請(qǐng)的數(shù)據(jù)對(duì)象,默認(rèn)的、系統(tǒng)自動(dòng)產(chǎn)生的拷貝構(gòu)造函數(shù)是淺拷貝默認(rèn)的、系統(tǒng)自動(dòng)產(chǎn)生的拷貝構(gòu)造函數(shù)是淺拷貝2. 在對(duì)象中有動(dòng)態(tài)資源申請(qǐng)的對(duì)象時(shí),必須要用深拷貝,在對(duì)象中有動(dòng)態(tài)資源申請(qǐng)的對(duì)象時(shí),必須要用深拷貝,否則析構(gòu)會(huì)出錯(cuò),而且不同的對(duì)象在利用拷貝構(gòu)造產(chǎn)否則析構(gòu)會(huì)出錯(cuò),而且不同的對(duì)象在利用拷貝構(gòu)造產(chǎn)生時(shí)會(huì)指向內(nèi)存的同一段區(qū)域生時(shí)會(huì)指向內(nèi)存的同一段區(qū)域2006-11
8、-22淺拷貝舉例淺拷貝舉例#include iostream.hclass Apublic:char *pchar;int size;A(int rsize,char *pconst);/構(gòu)造函數(shù)構(gòu)造函數(shù)聲明聲明void prt();/輸出字符串信息輸出字符串信息;A:A(int rsize,char *pconst)/構(gòu)造函構(gòu)造函數(shù)定義數(shù)定義size=rsize;pchar=new charsize;for(int i=0;*(pconst+i)!=0;i+)*(pchar+i)=*(pconst+i);*(pchar+i)=*(pconst+i);void A:prt()coutthe s
9、tr is :pcharendl;void main()A a(10,abcde);a.prt();A a1=a;a1.prt();*(a.pchar)=1;a.prt();a1.prt();程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果2006-11-222006-11-22修改成深拷貝修改成深拷貝#include iostream.hclass Apublic:char *pchar;int size;A(int rsize,char *pconst);/構(gòu)造函數(shù)聲明構(gòu)造函數(shù)聲明A()/析構(gòu)函數(shù)析構(gòu)函數(shù)delete pchar;/A(A &a);/拷貝構(gòu)造,深拷貝,聲明拷貝構(gòu)造,深拷貝,聲明void prt();/輸出字符串信息輸出字符串信息;A:A(int rsize,char *pconst)/構(gòu)造函數(shù)定構(gòu)造函數(shù)定義義size=rsize;pchar=new charsize;for(int i=0;*(pconst+i)!=0;i+)*(pchar+i)=*(pconst+i);*(pchar+i)=*(pconst+i);/寫入字符串結(jié)束寫入字符串結(jié)束符符0A:A(A &a)/拷貝構(gòu)造,是深拷貝拷貝構(gòu)造,是深拷貝pchar=new chara.size;for(int i=0;ia.size;i+)*(pchar+i)=*(a.pchar+i);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024裝修合同范本版
- 個(gè)人倉(cāng)庫(kù)租賃協(xié)議樣本
- 小學(xué)食堂食品供應(yīng)合同
- 2024年冷鏈車運(yùn)輸合同
- 校企合作框架協(xié)議書范例
- 2024售樓處物業(yè)服務(wù)合同(物業(yè))
- 2024英文股份合同范本英文股份合同
- 2024個(gè)人裝修房屋合同范本
- 2024《鋁合金門窗合同》
- 機(jī)動(dòng)車輛交易協(xié)議文本
- 趕工措施費(fèi)申請(qǐng)報(bào)告
- 訂單協(xié)調(diào)管理流程
- 全橋逆變電路濾波電路設(shè)計(jì)步驟
- 蒲公英總黃酮的提取及其抑菌性能
- jmeter性能測(cè)試及性能調(diào)優(yōu)
- 4gl語言開發(fā)原則及規(guī)范--簡(jiǎn)化版
- 工程量確認(rèn)單樣本(管線)
- 區(qū)最新關(guān)于生活垃圾分類工作推進(jìn)會(huì)上的講話稿
- 除塵器安裝專業(yè)監(jiān)理實(shí)施細(xì)則
- 八年級(jí)黃金矩形(數(shù)學(xué)活動(dòng))ppt課件
- 銷售技巧個(gè)頂尖電梯銷售技巧
評(píng)論
0/150
提交評(píng)論