




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C+程序設(shè)計實驗報告課程名稱:C+程序設(shè)計姓名:王鑫 實驗名稱:C+面向?qū)ο蟪绦蛟O(shè)計學(xué)號:20093509任課教師:張明衛(wèi)專業(yè):軟件工程指導(dǎo)教師:張明衛(wèi)班級:0908班實驗成績:批閱教師簽字:一、實驗?zāi)康谋敬螌嶒炈婕安⒁笳莆盏闹R點。1)學(xué)習(xí)類與對象的定義、聲明及使用方法。2)學(xué)習(xí)具有不同屬性的數(shù)據(jù)成員與成員函數(shù)的訪問方式。3)理解構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義與執(zhí)行過程。4)學(xué)習(xí)定義和使用類的繼承關(guān)系,定義派生類。二、實驗環(huán)境寫出程序編寫時所使用的編譯器、操作系統(tǒng)等。編譯器:Visual C+ 6.0.操作系統(tǒng):Windows XP.三、實驗內(nèi)容與實驗過程及分析列出實驗需要做的各個題目,并針對每個題目:1. 寫出關(guān)鍵代碼(要求選出該題目最核心的代碼并加注釋);2. 描述調(diào)試的過程、調(diào)試過程中所出現(xiàn)的現(xiàn)象及解決方法,給出題目最終運(yùn)行結(jié)果;3. 對該題目進(jìn)行簡短總結(jié),寫出該題目所涉及的知識點。1) 下面是“平面上點”類的定義:class CPointprivate:int x, y;static int nCount; / nCount用于保存點的個數(shù)public:CPoint(int px=0, int py=0);CPoint(CPoint&);CPoint();int GetX();int GetY();void SetX(int);void SetY(int);void ShowPoint();請完成該類中各成員函數(shù)的定義。該類是一個基本的類。在編寫該類時,要注意對靜態(tài)成員nCount的操作,使其能夠正確表示程序中點的個數(shù)。編完該類后,要在main()函數(shù)中進(jìn)行測試,分別定義CPoint類的對象、指針、引用,對各成員函數(shù)進(jìn)行調(diào)用。分析對靜態(tài)成員的調(diào)用和一般成員的調(diào)用方式有什么不同。1,本題目的核心代碼:int CPoint:nCount = 0; / 對nCount進(jìn)行初始化,靜態(tài)成員的調(diào)用CPoint:CPoint(int px, int py) / 構(gòu)造函數(shù)x = px;y = py;nCount+; / 點的個數(shù)累加CPoint:CPoint(CPoint& p) / 對構(gòu)造函數(shù)進(jìn)行拷貝x = p.x;y = p.y;nCount+; / 點的個數(shù)繼續(xù)累加 CPoint:CPoint() / 析構(gòu)函數(shù)nCount-;int CPoint:GetX()return x;int CPoint:GetY()return y;void CPoint:SetX(int px1) / 設(shè)置點的X坐標(biāo)x = px1;void CPoint:SetY(int py1) / 設(shè)置點的Y坐標(biāo)y = py1;void CPoint:ShowPoint() / 輸出點的個數(shù)及點的坐標(biāo)到屏幕cout點的個數(shù)為:CPoint:nCountendl;cout平面點的坐標(biāo)為:(CPoint:GetX(),CPoint:GetY()endl;2,調(diào)試過程中所出現(xiàn)的現(xiàn)象及解決方法:在調(diào)試時,程序不能運(yùn)行沒有運(yùn)行成功,經(jīng)過查閱資料后得知對靜態(tài)成員的調(diào)用必須用類名加雙冒號進(jìn)行調(diào)用,把代碼改成CPoint:nCount后,程序成功運(yùn)行。在構(gòu)造函數(shù)的聲明和定義中,都進(jìn)行了變量的賦值,結(jié)果造成編譯不通過,在去掉聲明中的賦值后,才編譯通過。程序運(yùn)行結(jié)果:3,題目總結(jié)及題目所涉及的知識點:通過本題學(xué)到了靜態(tài)成員的調(diào)用方法以及如何構(gòu)造、析構(gòu)函數(shù)。本題目主要涉及的知識點有:1, 構(gòu)造函數(shù)、析構(gòu)函數(shù)和拷貝。2, 靜態(tài)成員的調(diào)用和類與對象的定義、聲明及使用方法。3, 拷貝函數(shù)和構(gòu)造函數(shù)的編寫。4, 具有不同屬性的數(shù)據(jù)成員與成員函數(shù)的訪問方式。5, 構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義與執(zhí)行過程。2)下面是“平面上線段”類的定義:class CLineprivate:CPoint pt1, pt2; /pt1和pt2分別代表該線段的起點和終點public:CLine();CLine(int x1,int y1,int x2,int y2);CLine(CPoint p1,CPoint p2);double Distance(); /計算該線段長度的成員函數(shù)void ShowLine();請完成該類中各成員函數(shù)的定義。并利用VC調(diào)試工具觀察含有組合關(guān)系類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。1, 本題目的核心代碼:public:CLine(); /無參構(gòu)造函數(shù)CLine(int x1,int y1,int x2,int y2):pt1(x1,y1),pt2(x2,y2) / 構(gòu)造函數(shù)初始化列表CLine(CPoint p1,CPoint p2):pt1(p1),pt2(p2) / 構(gòu)造函數(shù)初始化列表double Distance(); /計算該線段長度的成員函數(shù)void ShowLine();double CLine:Distance() /計算線段的長度double a,b;a = (pt2.GetX() - pt1.GetX()*(pt2.GetX() - pt1.GetX();b = (pt2.GetY() - pt1.GetY()*(pt2.GetY() - pt1.GetY();return sqrt(a+b);void CLine:ShowLine() /在屏幕輸出線段長度cout線段的長度為:CLine:Distance()endl;2,調(diào)試過程中所出現(xiàn)的現(xiàn)象及解決方法:在調(diào)試時,程序先執(zhí)行nCount的構(gòu)造函數(shù),然后執(zhí)行Cline的構(gòu)造函數(shù)。在使用初始化參數(shù)列表時,要根據(jù)構(gòu)造函數(shù)里的參數(shù)變量名來編寫參數(shù)列表。程序運(yùn)行結(jié)果:3,題目總結(jié)及題目所涉及的知識點:通過這個實驗,了解到了如何運(yùn)用初始化列表進(jìn)行構(gòu)造函數(shù),它可以顯示的調(diào)用基類成員,本題目涉及到的主要知識點是用初始化列表進(jìn)行構(gòu)造函數(shù),組合類的聲明和定義以及組合類構(gòu)造函數(shù)的初始化過程。3) 下面是“空間中點”類的定義:class CThreePoint:public CPointprivate:int z;public:CThreePoint();CThreePoint(int, int, int);int GetZ();void SetZ(int pz);virtual void ShowPoint();請完成該類中各成員函數(shù)的定義。并利用VC調(diào)試工具觀察含有繼承關(guān)系類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。分析為什么要把ShowPoint()函數(shù)設(shè)置為虛函數(shù)?有什么作用?請在main()函數(shù)中做測試。1,本題目的核心代碼:CThreePoint:CThreePoint(int px2, int py2, int pz2) / CThreePoint的構(gòu)造函數(shù)CPoint:SetX(px2);CPoint:SetY(py2);CThreePoint:SetZ(pz2);CThreePoint:CThreePoint() / CTrheePoint的析構(gòu)函數(shù)int CThreePoint:GetZ() / 獲取并返回Z坐標(biāo)的值return z;void CThreePoint:SetZ(int pz) / 對Z坐標(biāo)的值進(jìn)行設(shè)置z = pz;void CThreePoint:ShowPoint() / 屏幕輸出點的坐標(biāo)cout空間點的坐標(biāo)為:(CPoint:GetX(),CPoint:GetY(),CThreePoint:GetZ()endl;2,調(diào)試過程中所出現(xiàn)的現(xiàn)象及解決方法:在調(diào)試過程中,程序首先執(zhí)行基類的構(gòu)造函數(shù),然后在執(zhí)行自己的構(gòu)造函數(shù)。程序運(yùn)行結(jié)果:3,題目總結(jié)及題目所涉及的知識點:通過這個實驗,了解到了:1, 程序首先執(zhí)行基類的構(gòu)造函數(shù),然后執(zhí)行自己的構(gòu)造函數(shù),以及在繼承關(guān)系中如何編寫構(gòu)造函數(shù)。2, 派生類對象不能直接訪問基類繼承過來的私有成員。3, 基類將函數(shù)聲明為虛函數(shù)即可,派生類和函數(shù)的定義處可以沒有關(guān)鍵字virtual.本題目涉及的知識點有:定義和使用類的繼承關(guān)系,定義派生類、派生類中構(gòu)造函數(shù)的編寫方法,和繼承關(guān)系中構(gòu)造函數(shù)的執(zhí)行順序。4)定義一個基類Animal,有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(int n)中直接給age賦值,看看會有什么問題,把a(bǔ)ge改為公有成員變量,還會有問題嗎?把a(bǔ)ge改為保護(hù)成員變量呢?編程試試看。1, 本題目的核心代碼: class Animalpublic:int age;class dog: public Animalpublic:int SetAge(int n)age = 3;2,題目總結(jié)及題目所涉及的知識點:編寫基類Animal時,成員變量age定義為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(int n)中直接對age賦值時,會出現(xiàn)類似以下的錯誤提示:error C2248:age:can not access private member declared in class Animal把a(bǔ)ge改為公有成員變量后重新編譯就可以了。再把a(bǔ)ge改為保護(hù)成員變量步驟相同。說明了派生類不能調(diào)用基類的私有成員變量的變量,而可以調(diào)用基類的公有成員和保護(hù)成員。設(shè)計的知識點有:派生類不能訪問基類的私有成員,可以訪問基類的保護(hù)和公有成員。五、實驗總結(jié)對自己的實驗的自我剖析,總結(jié)實驗的心得體會,并提出實驗的改進(jìn)意見等。在這次試驗中,感覺自己的程序最難編寫的地方就是類的構(gòu)造函數(shù),在經(jīng)過仔細(xì)的查閱資料和詢問同學(xué)后,終于熟練了構(gòu)造函數(shù)的編寫,從這次試驗中我學(xué)到了很多C+的核心知識,利如函數(shù)的構(gòu)造和析構(gòu)函數(shù),構(gòu)造函數(shù)初始化列表,拷貝,派生類和基類的構(gòu)造函數(shù)執(zhí)行的先后順序等。使我們在鞏固基礎(chǔ)的前提下游更大的提高。對于本實驗,雖然試驗內(nèi)容很少,但涵蓋的知識點頗多,能讓同學(xué)輕松的學(xué)到很多知識,但我感覺在給程序多加一些功能和達(dá)到更好的效果。能讓我們在學(xué)到知識的同時,鍛煉編寫出色代碼的能力。六、思考題回答實驗要求的思考題,要將原題也寫出來。1) 構(gòu)造函數(shù)和析構(gòu)函數(shù)的作用是什么?答:構(gòu)造函數(shù)又分為實例構(gòu)造函數(shù):實例構(gòu)造函數(shù)用于創(chuàng)建和初始化實例。私有構(gòu)造函數(shù):私有構(gòu)造函數(shù)是一種特殊的實例構(gòu)造函數(shù)。它通常用在只包含靜態(tài)成員的類中。如果類具有一個或多個私有構(gòu)造函數(shù)而沒有公共構(gòu)造函數(shù),則不允許其他類(除了嵌套類)創(chuàng)建該類的實例。靜態(tài)構(gòu)造函數(shù):靜態(tài)構(gòu)造函數(shù)用于初始化類。在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,將自動調(diào)用靜態(tài)構(gòu)造函數(shù)來初始化類。帶參數(shù)的構(gòu)造函數(shù)作用是為了來初始化某些值而設(shè)。析構(gòu)函數(shù):析構(gòu)函數(shù)用于銷毀類的實例。2) 什么是封裝?類是如何進(jìn)行封裝的?答:封裝就是將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成一個有機(jī)的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進(jìn)行有機(jī)的結(jié)合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。封裝的目的是增強(qiáng)安全性和簡化編程,使用者不必了解具體的實現(xiàn)細(xì)節(jié),而只是要通過 外部接口,一特定的訪問權(quán)限來使用類的成員。通過封裝使一部分成員充當(dāng)類與外部的接口,而將其他的成員隱蔽起來,這樣就達(dá)到了對成員訪問權(quán)限的合理控制,使不同類之間的相互影響減少到最低限度,進(jìn)而增強(qiáng)數(shù)據(jù)的安全性和簡化程序的編寫工作。3) C+中有哪幾種派生方式?每種方式的派生類對基類成員的繼承和訪問控制屬性是什么樣的?答:C+中的派生方式有public 、private 、protected?;?父類)得私有成員,派生類(子類)都不能訪問;基類得公有成員,派生類得繼承方式?jīng)Q定了其函數(shù)得形式;基類得保護(hù)成員在派生類得公有繼承中也是保護(hù)類型。4) 派生類對象和基類對象是什么樣的關(guān)系?派生類對象的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序是怎樣的?答:派生類繼承于基類。當(dāng)用派生類定義一個對象時,除了繼承時附加
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商店鋪裝修設(shè)計及供應(yīng)鏈管理合作協(xié)議
- 跨境知識產(chǎn)權(quán)忠誠協(xié)議資產(chǎn)凍結(jié)與知識產(chǎn)權(quán)保護(hù)協(xié)議
- 房屋相鄰權(quán)與物業(yè)管理服務(wù)合同
- 網(wǎng)絡(luò)廣告技術(shù)服務(wù)補(bǔ)充協(xié)議
- 智能家居網(wǎng)關(guān)設(shè)備研發(fā)與市場推廣服務(wù)合同
- 專屬私人飛機(jī)航線申請與VIP接送合同
- 員工股權(quán)解鎖與公司融資協(xié)議
- 生物檢測試劑盒市場推廣及銷售合作合同
- 現(xiàn)代化工企業(yè)生產(chǎn)管理體系建設(shè)
- 腰椎患者腹脹護(hù)理
- 大學(xué)文化主題辯論賽巔峰對決辯論辯答ppt模板
- c型鋼理論重量表規(guī)格表
- 廣東旅游車隊公司一覽
- ESD標(biāo)準(zhǔn)培訓(xùn)資料ppt課件
- 河南省確山縣三里河治理工程
- 水利工程合同工程完工驗收工程建設(shè)管理工作報告
- 多級泵檢修及維護(hù)(1)
- 涵洞孔徑計算
- 測量未知電阻的方法
- 中國民主同盟入盟申請表
- 觀感質(zhì)量檢查表
評論
0/150
提交評論