內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計(jì)試驗(yàn)8-繼承一_第1頁(yè)
內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計(jì)試驗(yàn)8-繼承一_第2頁(yè)
內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計(jì)試驗(yàn)8-繼承一_第3頁(yè)
內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計(jì)試驗(yàn)8-繼承一_第4頁(yè)
內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計(jì)試驗(yàn)8-繼承一_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某?序設(shè)計(jì)實(shí)驗(yàn)&繼承(一)內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計(jì)實(shí)驗(yàn)報(bào)告課程名稱:面向?qū)ο蟮某绦蛟O(shè)計(jì)姓名:陳偉光實(shí)驗(yàn)名稱:繼承(一)學(xué)號(hào):1567159118任課教師:劉月峰專(zhuān)業(yè):軟件工程指導(dǎo)教師:劉月峰班級(jí):15-軟件一班一、實(shí)驗(yàn)?zāi)康? 理解繼承的含義以及聲明;2 理解共有派生、私有派生和保護(hù)派生的含義以及使用;3 理解單派生類(lèi)中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。二、實(shí)驗(yàn)環(huán)境編譯器:Visual C+ 6.0.操作系統(tǒng):Win dows 7 旗艦版三、實(shí)驗(yàn)內(nèi)容2.1 練習(xí)(一):1 理解下面的程序,并在 VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#in elude

2、 "iostream.h"class CBasepublic:CBase(int a):aprotected:void prin t()cout<v"a="vvavve ndl;private:int a;;class CDerive : public CBasepublic:void prin t()CBase:pri nt();cout<v"b="vvbvve ndl;private:int b;void mai n()CDerive d;d.pr in t();CBase b;b.pr in t();問(wèn)題一:以上程序

3、有兩大錯(cuò)誤,試指出來(lái),并改正之?2 理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#in clude "iostream.h"class CBasepublic:CBase(int a):a(a)cout<<"base structure"<<e ndl;CBase()cout<<"base destructure"<<e ndl;void prin t()cout<v"a="vvavve ndl;protected:int a;;clas

4、s CDerive : public CBasepublic:CDerive(i nt a, int b,i nt c):CBase (a) ,b(b),c(c)cout<<"derive structure"<<e ndl;CDerive()cout<<"derive destructure"<<e ndl;void prin t()CBase:pri nt();cout<v"b.a="vvb.avve ndl;cout<<"c="<<

5、c<<e ndl;private:CBase b;in t c;void mai n()CDerive d(1,2,3); d.pr in t();問(wèn)題一:以上程序的輸岀結(jié)果是什么,說(shuō)明為什么?問(wèn)題二:處語(yǔ)句執(zhí)行完后,d.b.a的值為多少?2.2 練習(xí)(二):1 定義點(diǎn)CPoint類(lèi)作為基類(lèi),在此基礎(chǔ)上派生岀直線CLine類(lèi)和圓CCircle類(lèi),并要求基類(lèi)和各派生類(lèi)具有以下特點(diǎn):a. CLine類(lèi)含有計(jì)算直線長(zhǎng)度和斜率的成員函數(shù);b. CCircle類(lèi)含有計(jì)算圓面積的成員函數(shù)。四、實(shí)驗(yàn)過(guò)程練習(xí)1實(shí)驗(yàn)題目源代碼如下ttinclude "iostrean.h" cl

6、ass CBasepublic: CBasefint a) 汕(Jprotected: uoid pnint(>cout<<,a=(*<<a«e-n(ll;priuate: int a -CDerive ; publicpublic:uoid print()CBase:print(); cout«Mb-,«b«en(ll;private: int b;:void main()CDerins d; d.print(); CBase b;t> .print(); -Configuration: 8-1.1 - Uin32

7、DebugCompiling.8-1.1 r CPPC:usersadiiinistratorDesktop實(shí)驗(yàn).1 .cpp(7B): C:user5adinini5tratorDesktop實(shí)驗(yàn)航8-1.1 .cpp(72): C:UGpr£adniinlEtratorDpsl4top實(shí)驗(yàn). 1 _cpp(73):error error errorC:ucersadraLnistratorDe£l<top88-1.1 -Cpp(5d):執(zhí)行cl*exe時(shí)岀錯(cuò),C2512:C2512:C2248: gee declaration of'CDeriue'

8、; : no'C8as&' : no j|Hprint' : canm8-1.1 *obj - 1 PKror(s), 0 i>arning(&)查看錯(cuò)因,首先前兩句話寫(xiě)明,在創(chuàng)建CBase和CDerive對(duì)象時(shí)候,沒(méi)有傳遞參數(shù),實(shí)際代碼中CDerive根本沒(méi)有正確的構(gòu)造函數(shù),代碼區(qū)中加入一段帶有初始化列表的構(gòu)造函數(shù)第三句話指明基類(lèi)對(duì)象 b直接調(diào)用CBase類(lèi)保護(hù)成員函數(shù)屬于類(lèi)外調(diào)用,權(quán)限錯(cuò)誤,此處可以將print的權(quán)限改為public修改后的代碼如下include "iostream.h" class<public:CB

9、ase(int a):a(a)/ protected:ucdd printf)"錯(cuò)誤i類(lèi)對(duì)象類(lèi)外無(wú)法直接調(diào)用此主I<CDUt«Ma-,<<a«en(ll;>private:int d;;class CDeriue : publicpublic:CDpHii>p(int a,int b)"惜誤2.構(gòu)這函數(shù)錯(cuò)誤”初始化列表和參數(shù)錯(cuò),uoid print()C時(shí)強(qiáng):print();"保護(hù)繼承下,派生類(lèi)中可以訪間基類(lèi)的公牽cout«Mb-M«IK<en(ll;private:int b;;void

10、 nain()<CDerive d(0, 9> ;"因?yàn)樵}構(gòu)造函數(shù)中有形勢(shì)所以創(chuàng)建要加一d. print();CBase b(o);bkprint();然后嘗試編譯運(yùn)行運(yùn)行成功,符合題意練習(xí)2實(shí)驗(yàn)題目提供源代碼如下ttinclud ''iostrMfh-h*class cease-publtc::CDaef int a):a(a>cout«*,base structure"«endl;CBase()cniut«*,base destriicture"«endl;void printC>

11、;<CDUt«*'a-'X<a<<endl;>protected:int a;>;tlass CDtrlu? : public CBase<public:CDeriup(int a, int bint c):CBase(a),b(b),c(c)<caut<<"deriue structure"«endl;CD?riup()cout<<"deriue destructure"<<endl;uaid priftt(>DBase:pri

12、nt(> cout«,b_a=*,«b-a«endl; cout«*,c-l,<<c«endll;卜private;CBdse b;int c;>;void Rin()<C&eritfe(1C1,2.3);(1 printf);嘗試編譯:Configuration; 8一=2 - Uin32 Debug Compiling8-1_2.cppC:usersadminlstratorOeskt叩乜8T .g.cppf 93) : terror C224B: ' j ' : cannot 2 C_

13、usersadniinlstratorDesktopa8-1.2 .cpp(76) :tlEClrJtion of執(zhí)行cl.exe時(shí)岀嗇-8-1_2.obj - 1 errorfs), n warning(s)錯(cuò)誤集中在基類(lèi)成員數(shù)據(jù)a上,分析代碼,CDerive類(lèi)對(duì)象d創(chuàng)建時(shí)候一共有三個(gè)參數(shù),1傳遞至派生類(lèi),再調(diào)用基類(lèi)構(gòu)造函數(shù),3直接傳遞給派生類(lèi)構(gòu)造函數(shù),2傳遞給了派生類(lèi)的中內(nèi)嵌的=基*類(lèi)成員對(duì)象,然而在公有繼承下,派生類(lèi)對(duì)象只能訪問(wèn)基類(lèi)的公有數(shù)據(jù),所以此處將a的權(quán)限改為public,修改之后的代碼如下ttinclud d,ioGti-eam_hdr clss CBase<pubLic:

14、=a(a>cout«,base structure"«endl;>cout<<"base dest rue lure'*«endl;uaxd print()cout«"d=,<<a«endl f>public:int a;class C&eriue : public CBasepublic: GDeriwe(int at int b9int co :GBase(a),b(b).c(c)<cout«*'deriue structure&

15、quot;«endl;CDeriueC)<cout«*'cleriue destructur£"Enill;void print()"公有繼承下派主類(lèi)于對(duì)象只能訪問(wèn)基自CBse: zpnntC );cout<<"D 目二呂 WfEnill.: coutCCTs'XCcCtendl;priuate: CBase b; int c;void nain()<CDeriue dC1,2,3);/ d-print():嘗試編譯運(yùn)行'C:u £er5acfministrato rDes k

16、to ptSDeb u g8-1,2 ex e'phase structure btj-ase structupe depiu« GtFUCtUle k=l tb +0=2c -3derive desJbase destiuctur-e tbase destructU-F-e tPrc?s ony key tn cont inue結(jié)果和代碼本意相同,修改成功練習(xí)3根據(jù)題意,設(shè)計(jì)代碼如下:y<<pndl;l,<<endl;Itinclude <iostream.h> ttinclude <nath.h> class CPoint

17、priuate:float x,y;public: CPoint(loat x19float :x(x1) ,y(y1) <cout«,iCPoint基類(lèi)構(gòu)造函數(shù)已調(diào)用>uoid display()<cout«"x= 'XKCPoint: :x«a,«二i«CPoint:class CLine:public CPoint< priuate: double k; double 1;public: CLine(Float x1 ,Float y1) :CPoint(x1 )cout«-CLine派

18、生類(lèi)構(gòu)造固數(shù)已調(diào)用-Float x2»y2; cout«,fPlease input x2 9y2:,<<endl; cin»x2»y2;I=sqrt(x1-x2)*(x1-x2)+(y2-y1)(y2-y1); cout«,il:,i«K<endl;if(y2-y1?=0)< k=(y2-y1)/<x2-x1); cout«Bik= ,l«k«en(ll;> else分母為趴"不存在B,«endl;>>;class CCiMCle:pu

19、blic CPoint< priuate: double r;public: CCircle(float x1 ,float y1) :CPoint(x1,y1) <cout«M-CCircleiR生類(lèi)構(gòu)造函數(shù)己調(diào)用cout<<Mplease input r :,l<<endl;cin>>r; cout«MS= B,«3 .1M59*r*r«endl;>>; .uoid rnain()<float x13y1; cout<<MPlease input x1 ,iy1 :BI&l

20、t;<endl; cin>>x1>>y1;CPoint CP(x1CP.displaO; CLine CL(x1;CCircle CC(x1,y1);面積計(jì)算以及斜率計(jì)算分別寫(xiě)在了CLine類(lèi)和CCircle類(lèi)的構(gòu)造函數(shù)中,在創(chuàng)建對(duì)象的時(shí)候輸入 x2,y2 r即可算出距離和面 積試運(yùn)行結(jié)果如下21 'CAu 5 ft rsa dmiri *;tra-t&rD Mktop 讀驗(yàn)ebu gS-2 J, exe"Please input xlP :2_7CFcHnC基類(lèi)構(gòu)造函數(shù)已調(diào)用 x= 2.7 y= 6.4rFoint:基類(lèi)狗造函數(shù)已調(diào)用&

21、#163;血5哇旌莢物造函數(shù)已調(diào)用Pie ase input x2r2 £5.34_81=3-05297k= 061B3S5CPo hn基糞構(gòu)造醪已調(diào)用 kCirch派冬構(gòu)蓋函裁已調(diào)用please input r =S=亦 5357fress any k巳對(duì) to continue運(yùn)行結(jié)果正確五、實(shí)驗(yàn)總結(jié)實(shí)驗(yàn)源代碼:練習(xí)(一)#i nclude "iostream.h"class CBasepublic:CBase(i nt a):a(a)/ protected:void print() /錯(cuò)誤1.CBase類(lèi)對(duì)象類(lèi)外無(wú)法直接調(diào)用此主函數(shù),應(yīng)該改為public型c

22、out<v"a="vvavve ndl;private:int a;;class CDerive : public CBasepublic:CDerive(int a,int b):CBase(a),b(b)/ 錯(cuò)誤2.構(gòu)造函數(shù)錯(cuò)誤,初始化列表和參數(shù)錯(cuò)誤void prin t()CBase:pri nt(); /保護(hù)繼承下,派生類(lèi)中可以訪問(wèn)基類(lèi)的公有和保護(hù)數(shù)據(jù)cout<<"b="<<b<<e ndl;private:int b;void mai n()CDerive d(0,0); /因?yàn)樵}構(gòu)造函數(shù)中有形參,所

23、以創(chuàng)建要加上參數(shù)d.pr in t();CBase b(0);b.pr in t();/*#i nclude "iostream.h" class CBasepublic:CBase(int a):a(a)protected:void prin t()cout<<"a="<<a<<e ndl;private:;class CDerive : public CBase public:void prin t()CBase:pri nt();cout<v"b="vvbvve ndl;private:

24、int b;void mai n()CDerive d;d.pr in t();CBase b;b.pr in t();*/練習(xí)(二)#in clude "iostream.h"class CBasepublic:CBase(int a):a(a)cout<<"base structure"<<e ndl;CBase()cout<<"base destructure"<<e ndl;void prin t()cout<<"a="<<a<&

25、lt;e ndl;public:int a;class CDerive : public CBasepublic:CDerive(i nt a, int b,i nt c):CBase (a) ,b(b),c(c)cout<<"derive structure"<<e ndl;CDerive()cout<<"derive destructure"<<e ndl;void prin t()CBase:pri nt();cout<v"b.a="vvb.avve ndl; /公有繼承下派

26、生類(lèi)子對(duì)象只能訪問(wèn)基類(lèi)的公有數(shù)據(jù);cout<<"c="<<c<<e ndl;private:CBase b;in t c;void mai n()CDerive d(1,2,3);/ d.pr in t();/*1. 沒(méi)有任何輸岀結(jié)果,因?yàn)槌绦驘o(wú)法通過(guò)編譯2. d.b.a的值為2,因?yàn)闃?gòu)造函數(shù)實(shí)參的第二個(gè)元素2,傳遞給CDerive類(lèi)的子對(duì)象b,b.a被初始化為2*/*#i nclude "iostream.h"class CBasepublic:CBase(int a):a(a)cout<<"b

27、ase structure"<<e ndl;CBase()cout<<"base destructure"<<e ndl;void prin t()cout<<"a="<<a<<e ndl;protected:int a;class CDerive : public CBasepublic:CDerive(i nt a, int b,i nt c):CBase (a) ,b(b),c(c)cout<<"derive structure"<

28、;<e ndl;CDerive()cout<<"derive destructure"<<e ndl;void prin t()CBase:pri nt();cout<v"b.a="vvb.avve ndl;cout<<"c="<<c<<e ndl;private:CBase b;in t c;void mai n()CDerive d(1,2,3); d.pr in t();*/練習(xí)(三)#in elude <iostream.h>#in elude <math.h>class CPoi ntprivate:float x,y;public:CPoin t(float x1,float y1):x(x1),y(y1)cout«"CPoint基類(lèi)構(gòu)造函數(shù)已調(diào)用"<<endl;void display()cout<<"x= "«CPoint:x<<" &

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論