




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
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也會出錯也會出錯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)自動產(chǎn)生出一個缺省形式的構(gòu)造函數(shù)如果程序中未聲明,系統(tǒng)自動產(chǎn)生出一個缺省形式的構(gòu)造函數(shù)2. 缺省構(gòu)造函數(shù)不能超過一個,否則會有(缺省構(gòu)造函數(shù)不能超過一個,否則會有(warning or error)返返 回回3.拷貝構(gòu)造函數(shù)拷貝構(gòu)造函數(shù)注意一種特殊情形,重載運算符注意一種特殊情形,重載運算符“=
3、”與拷貝構(gòu)造的關(guān)系與拷貝構(gòu)造的關(guān)系1.當(dāng)沒有重載運算符“”時:Point p2p1表示調(diào)用Point類的拷貝構(gòu)造函數(shù),與Point p2(p1)等價; 而 Point p2; p2=p1; 此時調(diào)用的是C自動重載運算符函數(shù), 此時不會調(diào)用拷貝構(gòu)造函數(shù)。2.當(dāng)重載運算符“”時:與1相同,Point p2p1表示調(diào)用Point類的拷貝構(gòu)造函數(shù);而 Point p2; 而 p2=p1; 此時調(diào)用的是自定義的重載運算符函數(shù),即Operator,同時參數(shù)傳遞和函數(shù)值返回的原因,會調(diào)用拷貝構(gòu)造函數(shù)兩次。下頁例子#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; 等價于Point p1(p2); p2=p1;運行結(jié)果運行結(jié)果返返 回回2006
5、-11-224.派生類的構(gòu)造函數(shù)派生類的構(gòu)造函數(shù)職責(zé)職責(zé):1. 基類成員:基類構(gòu)造函數(shù)完成2. 內(nèi)嵌對象成員3. 新增成員注意注意:1. 基類構(gòu)造函數(shù),內(nèi)嵌對象構(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)對象中沒有動態(tài)資源申請的數(shù)據(jù)對象,淺拷貝只適合當(dāng)對象中沒有動態(tài)資源申請的數(shù)據(jù)對象,默認(rèn)的、系統(tǒng)自動產(chǎn)生的拷貝構(gòu)造函數(shù)是淺拷貝默認(rèn)的、系統(tǒng)自動產(chǎn)生的拷貝構(gòu)造函數(shù)是淺拷貝2. 在對象中有動態(tài)資源申請的對象時,必須要用深拷貝,在對象中有動態(tài)資源申請的對象時,必須要用深拷貝,否則析構(gòu)會出錯,而且不同的對象在利用拷貝構(gòu)造產(chǎn)否則析構(gòu)會出錯,而且不同的對象在利用拷貝構(gòu)造產(chǎn)生時會指向內(nèi)存的同一段區(qū)域生時會指向內(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();程序運行結(jié)果程序運行結(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨平臺整合提高品牌營銷效率的關(guān)鍵
- 2025年02月江蘇宿遷沭陽縣事業(yè)單位公開招聘工作人員103人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 防火設(shè)備的使用及維護(hù)超市消防器材培訓(xùn)重點
- 浙江國企招聘2024嘉興海寧上塘水務(wù)有限公司高品質(zhì)管道飲用水工作辦公室招聘4人筆試參考題庫附帶答案詳解
- 食品藥品行業(yè)行政法規(guī)的嚴(yán)格性與透明度
- 高中物理1.2時間位移練習(xí)2含解析人教版必修第一冊
- 財務(wù)軟件報表制作與數(shù)據(jù)分析技巧
- 跨學(xué)科融合下的學(xué)校與社區(qū)教育合作實踐研究
- 金融科技背景下的財務(wù)團(tuán)隊能力提升
- 財務(wù)風(fēng)險管理團(tuán)隊的組建與培訓(xùn)
- 數(shù)字化消防管理解決方案
- 二類汽修廠汽車維修管理新規(guī)制度匯編
- 人教PEP版英語五年級下冊第四單元全部課件
- 硬筆書法 社團(tuán)教案
- 中國膿毒癥及膿毒性休克急診治療指南
- 工序標(biāo)準(zhǔn)工時及產(chǎn)能計算表
- 人教版體育與健康四年級-《障礙跑》教學(xué)設(shè)計
- DB32-T 2860-2015散裝液體化學(xué)品槽車裝卸安全作業(yè)規(guī)范-(高清現(xiàn)行)
- 福利院裝修改造工程施工組織設(shè)計(225頁)
- 部編版六年級下冊語文課后詞語表(拼音)
- 現(xiàn)代寫作教程筆記
評論
0/150
提交評論