類和對(duì)象的定義和使用_第1頁
類和對(duì)象的定義和使用_第2頁
類和對(duì)象的定義和使用_第3頁
類和對(duì)象的定義和使用_第4頁
類和對(duì)象的定義和使用_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí) 驗(yàn) 報(bào) 告( 2016 / 2017 學(xué)年 第 二 學(xué)期)課程名稱 面向?qū)ο蟪绦蛟O(shè)計(jì)及C+實(shí)驗(yàn)名稱實(shí)驗(yàn)一: 類和對(duì)象的定義及使用實(shí)驗(yàn)時(shí)間2017年3月25日指導(dǎo)單位光電工程學(xué)院指導(dǎo)教師陳景強(qiáng)學(xué)生姓名班級(jí)學(xué)號(hào)學(xué)院(系)專 業(yè)實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)名稱類和對(duì)象的定義及使用 指導(dǎo)教師實(shí)驗(yàn)類型驗(yàn)證 實(shí)驗(yàn)學(xué)時(shí)2 實(shí)驗(yàn)時(shí)間一、 實(shí)驗(yàn)?zāi)康暮鸵螅?)掌握類與對(duì)象的定義與使用方法,理解面向?qū)ο蠓椒ㄖ型ㄟ^對(duì)象間傳遞消息的工作機(jī)制。(2)正確掌握類的不同屬性成員的使用方法。(3)掌握構(gòu)造函數(shù)與析構(gòu)函數(shù)的概念,理解構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行過程。(4)掌握友元函數(shù)和友元類的定義和使用。(5)基本掌握指針和引用作為函數(shù)

2、參數(shù)的應(yīng)用。二、實(shí)驗(yàn)環(huán)境(實(shí)驗(yàn)設(shè)備) 硬件: 微型計(jì)算機(jī) 軟件: Microsoft Visual C+6.0三、實(shí)驗(yàn)原理及內(nèi)容 實(shí)驗(yàn)題目(1)定義一個(gè)時(shí)間類Time,有三個(gè)私有成員變量Hour、Minute、Second,定義構(gòu)造函數(shù)、析構(gòu)函數(shù)以及用于改變、獲取、輸出時(shí)間信息的公有函數(shù),主函數(shù)中定義時(shí)間對(duì)象,并通過調(diào)用各種成員函數(shù)完成時(shí)間的設(shè)定、改變、獲取、輸出等功能。 按要求完成類的定義與實(shí)現(xiàn)。 修改數(shù)據(jù)成員的訪問方式,觀察編譯結(jié)果。 在Time類中定義一個(gè)成員函數(shù),用于實(shí)現(xiàn)時(shí)間增加一秒的功能,主函數(shù)中通過對(duì)象調(diào)用該函數(shù),并輸出增加一秒后的時(shí)間信息。 定義一個(gè)普通函數(shù)。void f(Tim

3、e t) t. PrintTime( );在Time類中增加拷貝構(gòu)造函數(shù)的定義,主函數(shù)中調(diào)用該函數(shù),運(yùn)用調(diào)試工具跟蹤,分析整個(gè)程序調(diào)用構(gòu)造函數(shù)(包括拷貝構(gòu)造函數(shù))和析構(gòu)函數(shù)的次數(shù);再將f函數(shù)的形式參數(shù)分別修改為引用參數(shù)和指針參數(shù)(此時(shí)函數(shù)代碼修改為t-> PrintTime( );,主函數(shù)中調(diào)用,再分析此時(shí)調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的次數(shù)。實(shí) 驗(yàn) 報(bào) 告參考實(shí)驗(yàn)教材中相應(yīng)的實(shí)驗(yàn)提示部分按要求完成程序,并回答相關(guān)問題。要求完成后的源程序代碼如下:#include<iostream>using namespace std;class Timeprivate:int Hour,Minu

4、te,Second;public:Time(int h=0,int m=0,int s=0);Time(const Time &ob);Time();void ChangeTime(int h,int m,int s);int GetHour();int GetMinute();int GetSecond();void PrintTime();void IncreaseOneSecond();Time:Time(int h,int m,int s) Hour=h; Minute=m; Second=s;Time:Time(const Time &ob) Hour=ob.Hour

5、; Minute=ob.Minute; Second=ob.Second;Time:Time()void Time:ChangeTime(int h,int m,int s) Hour=h; Minute=m; Second=s;int Time:GetHour() return Hour;int Time:GetMinute() return Minute;int Time:GetSecond() return Second;void Time:PrintTime() cout<<Hour<<": "<<Minute<<&q

6、uot;: "<<Second<<endl;void Time:IncreaseOneSecond() Second+;/*void Time:f(Time t) t.PrintTime(); cout<<"call fn"*/int main() Time a; Time b(13); Time c(13,15); Time d(13,15,45); a.PrintTime(); b.PrintTime(); c.PrintTime(); d.PrintTime(); a.ChangeTime(12,15,45); b.Cha

7、ngeTime(12,15,45); c.ChangeTime(12,15,45); d.ChangeTime(12,15,45); cout<<a.GetHour()<<":"<<a.GetMinute()<<":"<<a.GetSecond()<<endl; cout<<b.GetHour()<<":"<<b.GetMinute()<<":"<<b.GetSecond()<&

8、lt;endl; cout<<c.GetHour()<<":"<<c.GetMinute()<<":"<<c.GetSecond()<<endl; cout<<d.GetHour()<<":"<<d.GetMinute()<<":"<<d.GetSecond()<<endl; return 0;程序的運(yùn)行結(jié)果是:0: 0: 013: 0: 013: 15: 013: 15:

9、 4512:15:4512:15:4512:15:4512:15:45Press any key to continue 構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用方式及執(zhí)行順序是:先是構(gòu)造函數(shù)然后是析構(gòu)函數(shù)。調(diào)用方式是自動(dòng)調(diào)用,執(zhí)行順序是先執(zhí)行構(gòu)造函數(shù),待程序結(jié)束時(shí)再執(zhí)行析構(gòu)函數(shù)。 實(shí) 驗(yàn) 報(bào) 告取消類中成員函數(shù)IncreaceOneSecond( )的注釋標(biāo)志,將該函數(shù)補(bǔ)充完整,注意時(shí)間在增加一秒情況下的進(jìn)位關(guān)系。該函數(shù)的代碼如下:void Time:IncreaseOneSecond() if(Second<59) Second+; else if(Second=59&&M

10、inute=59&&Hour=23) Hour=0; Minute=0; Second=0; else if(Second=59&&Minute=59&&Hour<23) Minute=0; Second=0; Hour+; else if(Second=59&&Minute<59&&Hour<23) Minute+; Second=0; Hour+; cout<<Hour<<":"<<Minute<<":"&

11、lt;<Second<<endl; 主函數(shù)中定義一個(gè)Time類對(duì)象并調(diào)用一次f函數(shù),觀察結(jié)果填寫下表: f函數(shù)的原型主函數(shù)中調(diào)用f的語句構(gòu)造函數(shù)調(diào)用次數(shù)拷貝構(gòu)造函數(shù)調(diào)用次數(shù)析構(gòu)函數(shù)調(diào)用次數(shù)void f(Time t);F(t0)112void f(Time &t);F(t0)101void f(Time *t);F(p)101 通過以上結(jié)果,關(guān)于對(duì)象作形式參數(shù)、對(duì)象引用作形式參數(shù)、對(duì)象指針作形式參數(shù)時(shí)構(gòu)造函數(shù)、析構(gòu)函數(shù)的調(diào)用次數(shù)及順序,你得到什么結(jié)論?實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)題目(2) 定義一個(gè)Girl類和一個(gè)Boy類,這兩個(gè)類中都有表示姓名、年齡的私有成員變量,都要定義構(gòu)

12、造函數(shù)、析構(gòu)函數(shù)、輸出成員變量信息的公有成員函數(shù)。根據(jù)要求定義相應(yīng)的類。將Girl類作為Boy類的友元類,在Girl類的成員函數(shù)VisitBoy(Boy & )中訪問Boy類的私有成員,觀察程序運(yùn)行結(jié)果。在Boy類的某成員函數(shù)VisitGirl(Girl & )中試圖訪問Girl類的私有成員,觀察編譯器給出的錯(cuò)誤信息,理解原因。主函數(shù)中正確定義兩個(gè)類的對(duì)象,調(diào)用各自的成員函數(shù)實(shí)現(xiàn)相應(yīng)功能。再將Boy類作為Girl類的友元類,在Boy類的某成員函數(shù)VisitGirl(Girl & )中訪問Girl類的私有成員,觀察編譯器給出的信息。刪除兩個(gè)類中的函數(shù)VisitGirl(G

13、irl & ) ,VisitBoy(Boy & ),定義一個(gè)頂層函數(shù)VisitBoyGirl(Boy &, Girl &),作為以上兩個(gè)類的友元,通過調(diào)用該函數(shù)輸出男孩和女孩的信息。實(shí)驗(yàn)解答:定義相應(yīng)的類,主函數(shù)中定義相應(yīng)的類成員,調(diào)用各類的輸出函數(shù)顯示信息。源程序代碼如下:#include<iostream>using namespace std;class Boy;class Girlpublic:char name25;int age;Girl(char N,int A=19);Girl();void print();void VisitBoy

14、(Boy& );class Boypublic:char name25;int age;Boy(char N,int A=19);Boy();void print();friend Girl;Boy:Boy(char N,int A) strcpy(name,N); age=A;Boy:Boy()void Boy:print() cout<<"Boy: "<<name<<" "<<age<<endl;Girl:Girl(char N,int A) strcpy(name,N); age=

15、A;Girl:Girl() void Girl:print() cout<<"Girl: "<<name<<" "<<age<<endl;void Girl:VisitBoy(Boy & boy) cout<<"Boy's name: "<<<<endl; cout<<"Boy's age: "<<boy.age<<endl;int main()

16、 Boy a("xpx",19); Girl b("lala",19); b.VisitBoy(a); a.print(); b.print(); return 0;實(shí) 驗(yàn) 報(bào) 告程序的運(yùn)行結(jié)果是:Boy's name: xpxBoy's age: 19Boy: xpx 19Girl: lala 19Press any key to continue將Girl類作為Boy類的友元類, 寫出Girl類的成員函數(shù)VisitBoy(Boy & )的實(shí)現(xiàn)代碼。void Girl:VisitBoy(Boy & boy) cout&l

17、t;<"Boy's name: "<<<<endl; cout<<"Boy's age: "<<boy.age<<endl;實(shí) 驗(yàn) 報(bào) 告 在Boy類的某成員函數(shù)VisitGirl(Girl & )中試圖訪問Girl類的私有成員,記錄編譯器給出的錯(cuò)誤信息,與對(duì)比,你能得出友元的什么特性?友元關(guān)系是單向的,不具有交換性在上面代碼的基礎(chǔ)上,在Girl類的定義中,增加一行代碼:friend Boy; 在主函數(shù)中通過Boy類對(duì)象. VisitGirl(Gir

18、l類對(duì)象) 的形式輸出Girl類對(duì)象的信息。編譯的結(jié)果是?寫出這一步你的主函數(shù)代碼,要求分別用友元函數(shù)Girl類對(duì)象. VisitBoy(Boy類對(duì)象);和Boy類對(duì)象. VisitGirl(Girl類對(duì)象) ;和輸出兩個(gè)類對(duì)象的信息。D:Microsoft Visual StudioMyProjects實(shí)驗(yàn)二exp3_1.cpp|14|error: no void Girl:VisitBoy(Boy&)' member function declared in class Girl'| G1.VisitBoy(B2); B2.VisitGirl(G1);輸出:Girl

19、 constructingBoy constructingBoy's name: JackBoy's age: 22Girl's name: MaryGirl's age: 20實(shí) 驗(yàn) 報(bào) 告定義一個(gè)頂層函數(shù)void VisitBoyGirl(Boy &, Girl &),作為以上兩個(gè)類的友元函數(shù),主函數(shù)中通過調(diào)用該函數(shù)輸出男孩和女孩的信息。寫出該友元函數(shù)的完整代碼,以及主函數(shù)的代碼。void VisitBoyGirl(Boy &boy, Girl &girl) cout<<"Girl's name:

20、 "<<<<endl; cout<<"Girl's age: "<<girl.age<<endl; cout<<"Boy's name: "<<<<endl; cout<<"Boy's age: "<<boy.age<<endl;VisitBoyGirl(B2, G1);實(shí) 驗(yàn) 報(bào) 告四、實(shí)驗(yàn)小結(jié)(包括問題和解決方法、心得體會(huì)、意見與建議

21、等)1.在題目(1)中不改變main()函數(shù)中的對(duì)象的定義方式,若取消構(gòu)造函數(shù)中參數(shù)的默認(rèn)值,編譯程序錯(cuò)誤提示信息及出錯(cuò)原因是:D:Microsoft Visual StudioMyProjects實(shí)驗(yàn)一Time.cpp|7|error: no matching function for call to Time:Time()'|D:Microsoft Visual StudioMyProjects實(shí)驗(yàn)一Time.cpp|8|error: no matching function for call to Time:Time(int)'|D:Microsoft Visual St

22、udioMyProjects實(shí)驗(yàn)一Time.cpp|9|error: no matching function for call to Time:Time(int, int)'|函數(shù)二義性2.在題目(1)中如果刪除類中自定義的構(gòu)造函數(shù),僅使用系統(tǒng)默認(rèn)構(gòu)造函數(shù),再編譯,程序錯(cuò)誤提示信息及出錯(cuò)原因是:D:Microsoft Visual StudioMyProjects實(shí)驗(yàn)一Time.cpp|7|error: no matching function for call to Time:Time()'|D:Microsoft Visual StudioMyProjects實(shí)驗(yàn)一Tim

23、e.cpp|8|error: no matching function for call to Time:Time(int)'|D:Microsoft Visual StudioMyProjects實(shí)驗(yàn)一Time.cpp|9|error: no matching function for call to Time:Time(int, int)'| D:Microsoft VisualStudioMyProjects實(shí)驗(yàn)一Time.cpp|10|error: no matching function for call to Time:Time(int, int, int)'

24、;|構(gòu)造函數(shù)實(shí)參不正確3.在題目(1)中恢復(fù)成的正確狀態(tài),如果將main()函數(shù)中的輸出語句改為:cout<<對(duì)象名.Hour<<":"<<對(duì)象名.Minute<<":"<<對(duì)象名.Second<<endl; 重新編譯,會(huì)出現(xiàn)什么錯(cuò)誤提示?在這種情況下,如果將成員變量的訪問屬性修改為public再編譯,結(jié)果如何?D:Microsoft Visual StudioMyProjects實(shí)驗(yàn)一Time.h|17|error: int Time:Hour' is private|D:Microsoft Visual Stud

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論