面向?qū)ο蟪绦蛟O計實驗報告_第1頁
面向?qū)ο蟪绦蛟O計實驗報告_第2頁
面向?qū)ο蟪绦蛟O計實驗報告_第3頁
面向?qū)ο蟪绦蛟O計實驗報告_第4頁
面向?qū)ο蟪绦蛟O計實驗報告_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、面向?qū)ο蟪绦蛟O計實驗報告學生所在學院:信息科學與工程學院學生所在班級:學生姓名:指導教師:實驗 C+基礎1.1實驗目的.了解并熟悉開發(fā)環(huán)境,學會調(diào)試程序;.熟悉C+中簡單的標準輸入輸出函數(shù)的使用方法;.理解const修飾符的作用并學會應用;.理解內(nèi)聯(lián)函數(shù)的優(yōu)缺點并學會其使用場合;.理解并學會函數(shù)重載;.理解并熟練掌握使用new和delete來分配內(nèi)存;.理解并熟練掌握引用的使用方法。1.2實驗內(nèi)容121程序閱讀.理解下面的程序并運行,然后回答問題。#mcludemt max_def(int x,int y)(ieturn(xy?x:y);)mt max_def(int x,int y,mt z

2、)(mt temp=0;retuin(temp=(xy?x:y)z?temp :z;)double max_def(double x,double y)(ieturn(xy?x:y);)mt inam()(int xl=0;int x2=0;double dl=0.0;double d2=0.0;xl=max_def(5,6);x2 =max_d e 耳2,3,4);d 1 =max_def(2.1,5.6);d2=max_def(12.3,3,4,7.8);coutnx 1=Mx 1 endl;cout,tx2=Mx2endl;coutnd l=Md lendl;coutnd2=Md2end

3、l;leturn 1;j.問題一:上述程序的輸出結(jié)果是什么? 答:輸出結(jié)果為同工的文件夾V50Mewexl=6k2=4dl=5 6(12=12Press any key to continue問題二:處調(diào)用的是哪個函數(shù)?答:處調(diào)用的是 double max_def(double x,double y)函數(shù)問題三:處的輸出結(jié)果為什么是d2=12,而不是d2=12.3? 答:因為調(diào)用的mt max_def(int x,int y,mt z)函數(shù)返回值為整型。.理解下面的程序并運行,然后回答問題。#mcludemt mam() 一 int*pl=new int; 一 mt*p2=new int(O)

4、;chai*p3=new char10; leturn 1;j.問題一:、處動態(tài)申請內(nèi)存分別代表什么意思、?答:處:定義一個整型指針動態(tài)分配一個整型空間將首地址賦給pl;處:定義一個整型指針動態(tài)分配一個整型空間,并賦值為0;處:定義一個字符型指針動態(tài)分配具有10個數(shù)組元素的字符數(shù)組空間,將 首地址賦給p3。問題二:該程序存在什么不合理的地方?答:程序結(jié)束時沒有釋放分配的存儲空間。.理解下面的程序并運行,然后回答問題。#includevoid s ajnt b)(mt temp=a;a=b;b=temp;)void s*a,int*b)(mt temp=*a;*a=*b;*b=temp;)mt

5、mam()(int 1=5;mt j=10;coutnBefoie s,iHj=Mjendl;s);coutHAfter the fiist s,i,j=,jendl;s);coutHAfter the second s,i,j=,jendl;ictuin 1;問題一:輸出結(jié)果是什么?問題二:處函數(shù)調(diào)用不能實現(xiàn)兩個數(shù)的交換,而可以,原因是什么? 答:處調(diào)用的函數(shù)形參為整型變量,是值傳遞,形參的改變不影響實參;處調(diào)用的函數(shù)形參為指針,是址傳遞,形參的改變會導致實參的改變。 問題三:處調(diào)用的是哪個函數(shù)?答:調(diào)用的函數(shù)是void s*a,int*b)。實驗二類和對象一一類的構(gòu)建2.1實驗目的.類的定

6、義;.類對象的使用;.類成員變量的定義和使用;.類成員函數(shù)的定義和使用;.理解類的作用域;.理解類的聲明;.理解類中成員的訪問屬性;2.2實驗內(nèi)容程序閱讀.理解下面的程序并運行,然后回答后面的問題。#mcludeclass CDate(public:void Set(int m,int d,int y)(month=m;day=d;ycar=y;mt IsLeapYeaiQ(letiun (yeai%4=0 & year% 100!=0)11(yeai%400=0);void Pimt()(coutmonth,7Hdayt7Hyeaiendl;private:mt month;mt day;i

7、nt year;void inam()(CDate a;a.Set(10,15,2007);a.Piint();)問題一:以上程序為什么不能通過編譯?如何改正?答:因為Set函數(shù)被設為私有main函數(shù)中無法調(diào)用,應在set函數(shù)前加public。問題二:類中的成員函數(shù)和成員變量分別屬于哪種訪問權(quán)限?答:數(shù)據(jù)成員為私有,Punt為公有;set原為私有,改正后為公有。問題三:處語句的意思是什么?答:將類定義一個對象a。.理解下面的程序并運行,然后回答問題。.#includemt month;/全局變量mt day;mt year; JJvoid Set(mt m,int djnt y)(:month

8、=m;:day=d;:yea尸y; )class CDate(public:void Set(int m,int d,int y)(:Set(m,d,y);void Pimt()(coutmonth,7Hday,7Hyeaiendl;private:mt month;mt day;int year;;void mam()(CDate a;a.Set(l 0,15,2007);a.Piint();)問題一:處是在給成員變量賦值還是全局變量賦值,如果去掉域作用符:,程序 是否還能正確運行?答:全局變量,不能。問題二:處調(diào)用的哪個函數(shù),如果去掉域作用符::,程序是否還能正確運行?答:調(diào)用全局set函

9、數(shù);不能。問題三:程序的輸出結(jié)果是?答:實驗三類和對象一一構(gòu)造函數(shù)與析構(gòu)函數(shù)3.1實驗目的.理解this指針的作用和用法;.掌握構(gòu)造函數(shù)的定義和作用;.掌握構(gòu)造函數(shù)的使用;.掌握拷貝構(gòu)造函數(shù)的定義和使用;.掌握構(gòu)造函數(shù)的重載;.掌握析構(gòu)函數(shù)的定義和使用。3.2實驗內(nèi)容程序閱讀.理解下面的程序并運行,然后回答問題。#mcludeclass CPoint(public:void Set(int xjnt y);void Pimt();private:mt x;int y;;void CPomt:Set(int xjnt y)(x=x;y=y;)void CPomt:Pnnt()(cout,tx=,

10、x,y=uyendl;)void mam()(CPoint pt;pt. Set( 10,20);pt.PnntO;)問題一:以上程序編譯能通過嗎?如果不能,原因是什么?答:能通過編譯。問題二:以上程序的運行結(jié)構(gòu)是否正確,如果不正確,分析為什么,如何改正? 答:運行結(jié)構(gòu)不正確,因為Set函數(shù)中,x=x,參數(shù)x覆蓋數(shù)據(jù)成員,使得數(shù)據(jù)成 員并沒有被賦值。.理解下面的程序并運行,然后回答后面的問題。mcludeclass CPerson(public:void Pimt();private:CPerson();private:mt age;chai*name;CPei son: :CPeisonQ(

11、)void CPeison:PnntO(coutnnamc=,naineage=,ageendl;)void mam()(CPerson ps(23,張三);ps.PnntO;)問題一:以上程序存在三個錯誤,在不改變主函數(shù)內(nèi)容的前提下,試改正該程序。 答:第一處錯誤是:在程序頭應添加#includestnng.h文件,第二處錯誤是:構(gòu)造 函數(shù)沒有參數(shù),應添加為(mt 1,chaij),第三處錯誤是:構(gòu)造函數(shù)沒有函數(shù)體。改正 后的程序為:#mclude#includcclass CPerson(public:void Pimt();CPerson(int i ,chai *j);public:m

12、t age;chai *name;CPeison: :CPeison(mt i.char *j)(age=i;nainej;void CPeison:PnntQ(coutnname=,nameage=,ageendl;)void inam()(CPerson ps(23,“張三”);ps.PnntQ;實驗四類和對象一對象傳遞與靜態(tài)成員實驗目的.靜態(tài)成員(靜態(tài)數(shù)據(jù)成員、靜態(tài)成員函數(shù))的作用與使用時的注意事項 2.學友元(友元函數(shù)、友元類)的作用和使用;3.理解常類型。4.2實驗內(nèi)容程序閱讀.理解下面的程序并運行,然后回答后面的問題。#mclude#include class CStiident

13、( public:CSnident(char*njnt a);C Student。;static void SetAge(int age);private:chai*name;mt age;static int nTotalObj;mt CStiident:nTotalObj=0;CStudent:CStudent(char*n,int a):age(a)(mt nLcn=strlen(n);naine=new chaiiiLen+l;strcpy(name,n);nameiiLen=t;nTotalObj+;)CStudent:CStudent。(deletename;nTotalObj-;

14、)void CStudent:SetAge(mt age)(this-age=age;)void mam()(CStudent stul(“張三”,25);CStudent str2(“ 李四 ”,26);coutnCStudent:nTotalObj=,CStiident:nTotalObjendl;)問題一:以上程序編譯能通過嗎,為什么?答:不能,CStudent:nTotalObj為私有變量,類引不能訪問。問題二:成員變量nTotalObj起什么作用,它是如何實現(xiàn)的?答:統(tǒng)計該類所創(chuàng)建對象的個數(shù),通過聲明為靜態(tài)。問題三:如果不改編主函數(shù)和類Cstudent中的成員變量的屬性,應該如何改正

15、該程 序?答:可以將static int nTotalObj聲明為公有。.理解下面的程序并運行,然后回答后面的問題。#mclude#mc ludeclass CStiident(public:CStiident(chai*njnt a);C Student。;private:chai*name;mt age;;CStudcnt: :CStudent(char*n,int a):age(a)(mt iiLcn=strlen(n); naine=new chaiiiLen+l; strcpy(name,n);nainenLen=r;)CStudent:CStudent。(deletename;)c

16、lass CTeacher(public:CTeachei(chai*tn4nt ta);-CTeacheiQ;void SetStuAge(int a);private:chai*name;mt age;CSmdent stu;;CTeacher:CTeachei(chai*tnjnt ta) :age(ta) (mt iiLcn=strlen(tn); naine=new chaiiiLen+l; strcpy(name,tn);nainenLen=r;CTeachci:CTeachei。(deletename;)void CTeacher: SetStuAge(int a)(stii.a

17、ge=a;)void inam()(CStudent stul(“張三”,25);CStudent str2(“ 李四 ”,26);)問題一:以上程序有兩個錯誤,指出并改正。答:第一處錯誤是Cstiident age為私有,Cteachei無法訪問。第二處錯誤是Cteachei中Cstiident未初始化。改正: public:int ageCteachei:Ctcachei(char*tn4iit ta):age(ta),stii(tn,ta).理解下面的程序并運行,然后回答后面的問題。#mcludeclass Date(private:const int year;const int mo

18、nth;const int day;public:Date(mt yjnt m,int d);void showdate();Date:Date(mt y,mt mjnt d)(yeax=y;month=m;day=d;void Date:showdate()coutyear,7Hmonth,7,dayendl;)void inam()(const Date obj(2007,10,30);obj.showdate();)問題一:以上程序有兩個錯誤,試指出來,并改正之?答:第一處錯誤是:構(gòu)造函數(shù)應該用成員初始化列表對常數(shù)據(jù)成員初始化;第二處 錯誤是:沒有用常成員函數(shù)訪問常對象數(shù)據(jù)成員。改正后的

19、程序為:#mcludeusing namespace std;class Date(private:const int year;const int month;const int day;public:Date(mt y,int m,int d);void showdate()const;Date:Date(int y,mt mjnt d):ycar(y),month(m),day(d)(void Date:showdate()const(coutyeai,7,month,7,dayendl;)void mam()(Date obj(2007J0,30);obj.showdate();實驗五

20、派生與繼承一單基派生5.1實驗目的d.pnnt();CBase b;b.pnnt();j.問題一:以上程序有兩個錯誤,試指出來,并改正之。答:類CBase中的成員數(shù)據(jù)應該為公有訪問屬性,第二個錯誤是構(gòu)造函數(shù)有問題。 改正后的程序有兩種:#mcludeusing namespace std;class CBase(public:CBase(mt a):a(a)( Void piint()(coutua=Haendl; public:mt a;;class CDenve:public CBase(public:CDenve(int ajnt b):CBase(a),b(b) / ivoid pnn

21、tQ(CBasecoutub=Mbendl;) private:mt b;;CDenve d(6,4); d.pimt();CBase b(5); b.pimt();#mclude using namespace std; class CBasejpublic:void pimtQ(coutua=Haendl; public:mt a;class CDenve:public CBase public:void pnntQ(CBase :pimtO;coutnb=Mbendl;private:mt b;void inain()CDenve d;d.pnnt();CBase b; b.pnnt()

22、;)2.理解下面的程序并運行,然后回答后面的問題。#uicludeniostieam.hH class CBase (public:CBase(mt a) :a(a) (coutHbase stnictuienendl;CBase() (coutHbase destmcnneMendl;void pnntO (coutna=Haendl; protected:mt a;class CDenve:public CBase (public:CDenve(int ajnt b,int c) :CBase(a),b(b),c(c) (cout,rdeivice stmctmeMendl;CDeiive

23、()cout,rdenve destn.ictuieHendl; void pnntQ(CBase:pimtO;coutnb.a=Hb.aendl; coutnc=,cendl; private:CBase b;int c;void inam()(CDenve d(l,2,3);d.pnnt();)問題一:以上程序的輸出結(jié)果是什么,為什么? 答:輸出結(jié)果是圖 C:W indowssystem32cmd.exebase structure base structure deruice structure a=l b.a=2 c =3 deriue destructure base destrue

24、ture base destructure 請按任意鍵繼續(xù).原因是基類和派生類中構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序。 問題二:處語句執(zhí)行完后,d.b.a的值為多少?答:值為1。實驗六派生與繼承一多基派生實驗目的.理解多基派生的定義;.基派生中的構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序;.理解多基派生中虛基類的作用。實驗內(nèi)容程序閱讀1.理解下面的程序并運行,然后回答后面的問題。 class CBascl(public:CBasel(int a) :a(a) (coutnbasel stmcture.Mendl;CBasel()(coutHbasel destinetuie.Hendl;void piintQ( c

25、outua=Haendl;protected:mt a;class CBase2(public:CBase2(int b) :b(b) coutnbase2 stmctuie.nendl;CBase2()(coutnbase2 destmctiue.Mendl;void pnntOcoutub=nbendl; piotected:int b;class CDenve:public CBasel,public CBase2(public:CDenve()(coutudenve stmctiue.Mendl;CDeiive。 scoutHdenve destmctuie.nendl;void pn

26、ntO(CBasel:prmt();CBase2:pimt();bl.pnntO;b2.pinitQ;cout,c=,lcendl;private:CBasel bl;CBase2 b2; mt c;void mam()(CDenve d;d.pnnt();)問題一:改正以上程序中的錯誤,并分析輸出結(jié)果。答:CBasel與CBase2沒有合適的構(gòu)造函數(shù),改正方法在CBasel,CBase2設置缺省 值為0改正:將 CDenve 構(gòu)造函數(shù)改為:CDenve(int a,int b,int c):CBase l(a),CBase2(b),b l(a),b2(b),c(c)(cout,rdenve

27、stmctiire.Mendl;主函數(shù)中 CDenve d:改為 CDenve d (1,2,3);輸出結(jié)果是:西C:windowssystem32cnnd.exe-bft&el structure. hase2 structure. base! structure. basc2 structure. dei*iue structure, a*i h=2b*2c=3 derive destructure. h*se2 d&stucture 3.d&fitructure. base2 d&structurc. base! destucture. 請按任意鍵雉續(xù),一實驗七多態(tài)性一函數(shù)與運算符的重載

28、7.1實驗目的.理解靜態(tài)聯(lián)編和動態(tài)聯(lián)編的概念;.掌握成員函數(shù)方式運算符重載;.掌握友元函數(shù)方式運算符重載;.掌握+、=運算符的重載。.2實驗內(nèi)容.理解下面的程序并運行,然后回答后面的問題。#uicludeniostieam.hHclass CCoinplex(public:CCoinplex()(ieal=0;unag=0;CCoinplex(int x,mt y)(ieal=x;unag-y;mt real;mt iinag;CCoinplex opeiator+(CComplex objl) (CCoinplex obj2(ieal+obj 1 .ieal,Hnag+obj l.unag)

29、; letiun obj2;void inain()CCoinplex obj 1(100,30);CCoinplex obj2(20,30);CCoinplex obj; obj=objl+obj2; coutobj .iealendl; coutobj .unagendl;問題一:處的運算符重載,為什么該函數(shù)的返回值要設計成Ccomplex類型? 答:處運算符重載,要返回兩個值real和imag,所以函數(shù)返回值類型設計為 CCoinplex 類型。問題二:處的運算符重載函數(shù)調(diào)用就相當于obj=ope皿0什(objl, obj2);”,請 問CComplex類中的運算符重載函數(shù)為什么只有一個

30、參數(shù)? 答:因為調(diào)用重載運算符的對象本身相當于一個參數(shù)。課后習題第二章一實驗目的.掌握引用的使用。.掌握調(diào)用函數(shù)的方法。二.實驗內(nèi)容.19寫出下列程序的運行結(jié)果。#mclude using namespace std; void f(mt n) mt temp; tcmp=m; m=n;n=temp;lilt inam() mt a=5,b=10;f(a,b)couta5,bendl;retuin 0;三.實驗結(jié)果四,心得體會.引用可以作為函數(shù)形參,和指針變量作為函數(shù)參數(shù)效果一樣,但是引用作為函數(shù) 參數(shù)更清晰。.弟二早一.實驗目的L掌握靜態(tài)數(shù)據(jù)成員的使用。2.掌握靜態(tài)成員函數(shù)的使用。二.實驗內(nèi)

31、容3.26寫出下列程序的運行結(jié)果。#mclude using namespace std; Class M mt A;static int B;public: M(mt a) ( A=a;B+=a;coutConstmctingn,5endl;)Static void fl(M m);M() coutDestmctingnendl;);VoidCoutA=,5m.Aendl;Cout,B-,bendl;)mt M:B=O;mt inam()(MP(5),Q(10);M:fl(Q);Retiun 0;三.實驗結(jié)果&B C:Windowssystem32cmd.exeConstructingConstructingA =5B=15DestructingA=10B=15DestructingDestructingDestructing請按任意鍵繼續(xù). . .四,心得體會.靜態(tài)數(shù)據(jù)成員主要用作類的所有對象所公用的數(shù)據(jù),它在類的任何對象建立前就 存在了。.一般情況下,靜態(tài)成員函數(shù)來訪問靜態(tài)數(shù)據(jù)成員。第四章一.實驗目的.掌握派生類的繼承方式。.掌握派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)。.掌握派生類構(gòu)造函數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論