


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計(jì)實(shí)驗(yàn)8-繼承(一)內(nèi)蒙古科技大學(xué)面向?qū)ο蟮某绦蛟O(shè)計(jì)實(shí)驗(yàn)報(bào)告課程名稱:面向?qū)ο蟮某绦蛟O(shè)計(jì)姓名:陳偉光實(shí)驗(yàn)名稱:繼承(一)學(xué)號:1567159118任課教師:劉月峰專業(yè):軟件工程指導(dǎo)教師:劉月峰班級:15-軟件一班1. 一、實(shí)驗(yàn)?zāi)康睦斫饫^承的含義以及聲明;理解共有派生、私有派生和保護(hù)派生的含義以及使用;理解單派生類中構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。二、實(shí)驗(yàn)環(huán)境編譯器:VisualC+6.0.操作系統(tǒng):Windows7旗艦版三、實(shí)驗(yàn)內(nèi)容2.1練習(xí)(一):1.理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問題。#include"iostream.
2、h"classCBasepublic:CBase(inta):a(a)protected:voidprint()(cout<<"a="<<a<<endl;)private:inta;);classCDerive:publicCBase(public:voidprint()(CBase:print();cout<<"b="<<b<<endl;)private:intb;);voidmain()(CDerived;d.print();CBaseb;b.print();)問題一:
3、以上程序有兩大錯(cuò)誤,試指出來,并改正之?2.理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問題。#include"iostream.h"classCBase(public:CBase(inta):a(a)(cout<<"basestructure"<<endl;)CBase()(cout<<"basedestructure"<<endl;)voidprint()(cout<<"a="<<a<<endl;)protec
4、ted:inta;);classCDerive:publicCBase(public:CDerive(inta,intb,intc):CBase(a),b(b),c(c)(cout<<"derivestructure"<<endl;)CDerive()(cout<<"derivedestructure"<<endl;)voidprint()(CBase:print();cout<<"b.a="<<b.a<<endl;cout<<"
5、c="<<c<<endl;)private:CBaseb;intc;);voidmain()(CDerived(1,2,3);d.print();)問題一:以上程序的輸出結(jié)果是什么,說明為什么?問題二:處語句執(zhí)行完后,d.b.a的值為多少?2.2練習(xí)(二):1.定義點(diǎn)CPoint類作為基類,在此基礎(chǔ)上派生出直線CLine類和圓CCircle類,并要求基類和各派生類具有以下特點(diǎn):a. CLine類含有計(jì)算直線長度和斜率的成員函數(shù);b. CCircle類含有計(jì)算圓面積的成員函數(shù)。四、實(shí)驗(yàn)過程練習(xí)1實(shí)驗(yàn)題目源代碼如下ttinclude"iostreara.
6、h'classCBase(public:CBasefinta)protected:uoidpnintocout<<,a=(*<<a«e-n(ll;priuate:inta-CDerive:public(public:uoidprint()(CBase:print();)private:intb;>:voidmain()<CDerins0;d.print();CBaseb;b,print();)!接編譯結(jié)果如下:Configuration:8-1.1-Uin32DbugCompiling.8-1.1,cppC2512:'CDeriue
7、':noC2512:'CBasp':noj|C22it8:Hprint':canm:典dclaratianofC;usersadniinistratorDeslctop88-1.1.cpp(79):errorC:usersadiiiini5tratorDesktop實(shí)驗(yàn)_cpp(72):errorC:UEEFEMmliiMt3torD萸letup、實(shí)驗(yàn)88-1.1_cpp(73):errorC:ucersadraLnistratorDe£l<top88-1.1_cpp(5®)執(zhí)行cl*exe時(shí)出借.8-1.1*obj-1PKror(s)
8、,0i>arning(&)查看錯(cuò)因,首先前兩句話寫明,在創(chuàng)建CBase和CDerive對象時(shí)候,沒有傳遞參數(shù),實(shí)際代碼中CDerive根本沒有正確的構(gòu)造函數(shù),代碼區(qū)中加入一段帶有初始化列表的構(gòu)造函數(shù)第三句話指明基類對象b直接調(diào)用CBase類保護(hù)成員函數(shù)屬于類外調(diào)用,權(quán)限錯(cuò)誤,此處可以將print的權(quán)限改為public修改后的代碼如下include"i05tream.i1"class(public:CBase(inta):a(a)/protected:uoMprint()錯(cuò)誤1四a典類對象類外無法直接調(diào)用此主I(cout<<',a="
9、;<<a<<en(ll;>private:intd;;classCDeriue:publicCBa睫public:CDpHivp(inta,intb)借誤2構(gòu)造函數(shù)錯(cuò)誤*初始化列表和參數(shù)惜,(uoidprint()e啟興:print();保護(hù)繼承下,派生類中可以訪問基類的公布caut<<nb=l*<<b<<endL;private:intb;;voidiwin()(CDerived(0,9>;因?yàn)樵}構(gòu)造函敝中有形爵.所以創(chuàng)建要加一d.print();GBaseb(0);b.print();"Ciu5ersjdm
10、ini5tratoldop&Debug&-lnlsxe"3)=0k=9Pi,-essanykeiftncontinue運(yùn)行成功,符合題意練習(xí)2實(shí)驗(yàn)題目提供源代碼如下ttinclud''iostrMfh-h*classcease-publtc::CDaefinta):a(a>cout«*,basestructure"«endl;卜CBase()cniut«*,basedestriicture"«endl;卜voidprintC>CDUt«*'a-'X<
11、a<<endl;>protected:inta;>;tlassCDtrlu?:publicCBase<public:CDeriup(inta,intbintc):,b(b),c(c)caut<<"deriuestructure"«endl;CD?riup()cout<<"deriuedestructure"<<endl;uaidpriftt(>CBase:print(>cout«,b_a=*,«b-a«endl;cout«*,c
12、-l,<<c«endll;private;CBdseb;intc;>;void贖in()C&eritfe(1(1,2.3)id.printf);嘗試編譯:Configuration;8-1.2-Uin32DebugCompiling8-1_2.cppC:usersadminlstratorOeskt_2.cpp(93):terrorC224B:'j':cannot日C_usersadniinlstratorDesktopa8-1.2.cpp(76):tlEClrJtionof執(zhí)行cl.exe時(shí)出輯-8-1_2.obj-1errorfs),nw
13、arning(s)錯(cuò)誤集中在基類成員數(shù)據(jù)a上,分析代碼,CDerive類對象d創(chuàng)建時(shí)候一共有三個(gè)參數(shù),1傳遞至派生類,再調(diào)用基類構(gòu)造函數(shù),3直接傳遞給派生類構(gòu)造函數(shù),2傳遞給了派生類的中內(nèi)嵌的基類成員對象,然而在公有繼承下S£S,派生類對象只能訪問基類的公有數(shù)據(jù),所以此處將a的權(quán)限改為public,修改之后的代碼如下ttincludd,ioGti-eam_hdrclassCBase<public:CBsCiritm=a(a>cout«"baspstructure"«endl;>"CBaseOcout<<&
14、quot;basedestruelure'*«endl;>uai-dprint()cout«"d=,<<a«endl;>public:inta;>;classC&eriue:publicCBase(;public;GDb9intc):GBase(a),b(b).c(c)cout«*'deriuestructure,X<endl;>""GDeriueC)<cout«*'deriuedestructure,i
15、171;en<ll;>voidprintf)<CBse:zprintc);coUt«-b.a=-«b.a«endl;公有繼承下派生類亍對象只能訪向基McoutCCTs'XCcCtendl;>priuate:CBaseb;intc;>:uoidinatn()CDeriuedC1,2.3);/d-print();嘗試編譯運(yùn)行,C:u£er5acfministratorDesktoptSDebug8-1,2exe'phasestructurebtj-asestructupedepiu«GtFUCtUlek
16、=ltb,=2c-3derivedestruetlireJbasedestiMlctu.r-etbasedestructiip-etPrc?sMykeytncontinue結(jié)果和代碼本意相同,修改成功練習(xí)3根據(jù)題意,設(shè)計(jì)代碼如下Itinclude<iostream.h>ttinclude<nath.h>classCPointpriuate:floatx,y;public:CPoint(loatx19float:x(x1),y(y1)<cout«"CPoint基類構(gòu)造函數(shù)已調(diào)用if<<endl;>uoiddisplay()<
17、;cout«"x='XKCPoint:x«a,t«Biy=i«CPoint:y<<endl;classCLine:publicCPoint<priuate:doublek;double1;public:CLine(Floatx1,Float:CPoint(x1,1)cout«-CLirw派生類構(gòu)造國數(shù)已調(diào)用f,«endl;|Floatx2»y2;cout«,fPleaseinputx29y2:,<<endl;cin»x2»y2:I=sqrt(x1-
18、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;>elsecouty分母為不存在B,«endl;>>;classCCiMCle:publicCPoint<priuate:doubler;public:CCircle(floatx1,floaty1):CPoint(x1,y1)cout«M-CCircle生類構(gòu)造函數(shù)己調(diào)用M<<endl
19、;cout«llpleaseinputr:,l<<endl;cin>>r;cout«MS=B,«3.1M59*r*r«endl;uoidrnain()floatx13y1;cout<<MPleaseinputx1,iy1:BI<<endl;cin>>x1>>y1;CPointCP(x1CP.displaO;CLineCL(x1;CCircleCC(x1,y1);面積計(jì)算以及斜率計(jì)算分別寫在了CLine類和CCircle類的構(gòu)造函數(shù)中,在創(chuàng)建對象的時(shí)候輸入x2,y2r即可算出距離和面積
20、試運(yùn)行結(jié)果如下:'15'CiAu5&rsadmiristra-t&rDktop®BDebgS-2J.eye"PleaseinputxlP:2_7b.4CPointg類構(gòu)造函數(shù)已調(diào)用,=2.7y=6.4rPoint§4Ste道函數(shù)已調(diào)用k皆Li檢簍購造函藪已惆用Pleaseinputx2,2-5.34_81=3-05297k=-0-615385CPoMt基芙構(gòu)造蟹已調(diào)用:CCMQe派典構(gòu)普函彼已調(diào)用pleaseinputF-B8=78-5357Pressanykettocontinue運(yùn)行結(jié)果正確五、實(shí)驗(yàn)總結(jié)實(shí)驗(yàn)源代碼:練習(xí)(一)#i
21、nclude"iostream.h"classCBasepublic:CBase(inta):a(a)/protected:voidprint()/錯(cuò)誤1.CBase類對象類外無法直接調(diào)用此主函數(shù),應(yīng)該改為public型cout<<"a="<<a<<endl;)private:inta;);classCDerive:publicCBase(public:CDerive(inta,intb):CBase(a),b(b)/錯(cuò)誤2.構(gòu)造函數(shù)錯(cuò)誤,初始化列表和參數(shù)錯(cuò)誤(voidprint()(CBase:print();/保護(hù)
22、繼承下,派生類中可以訪問基類的公有和保護(hù)數(shù)據(jù)cout<<"b="<<b<<endl;private:intb;voidmain()(CDerived(0,0);/因?yàn)樵}構(gòu)造函數(shù)中有形參,所以創(chuàng)建要加上參數(shù)d.print();CBaseb(0);b.print();/*#include"iostream.h"classCBase(public:CBase(inta):a(a)(protected:voidprint()(cout<<"a="<<a<<endl;pr
23、ivate:inta;);classCDerive:publicCBase(public:voidprint()(CBase:print();cout<<"b="<<b<<endl;)private:intb;);voidmain()(CDerived;d.print();CBaseb;b.print();)*/練習(xí)(二)#include"iostream.h"classCBase(public:CBase(inta):a(a)(cout<<"basestructure"<<
24、endl;)CBase()(cout<<"basedestructure"<<endl;)voidprint()(cout<<"a="<<a<<endl;)public:inta;);classCDerive:publicCBase(public:CDerive(inta,intb,intc):CBase(a),b(b),c(c)(cout<<"derivestructure"<<endl;)CDerive()(cout<<"de
25、rivedestructure"<<endl;)voidprint()(CBase:print();cout<<"b.a="<<b.a<<endl;/公有繼承下派生類子對象只能訪問基類的公有數(shù)據(jù);cout<<"c="<<c<<endl;)private:CBaseb;intc;);voidmain()(CDerived(1,2,3);/d.print();)/*沒有任何輸出結(jié)果,因?yàn)槌绦驘o法通過編譯d.b.a的值為2,因?yàn)闃?gòu)造函數(shù)實(shí)參的第二個(gè)元素2,傳遞給CDe
26、rive類的子對象b,b.a被初始化為2*/*#include"iostream.h"classCBase(public:CBase(inta):a(a)(cout<<"basestructure"<<endl;)CBase()(cout<<"basedestructure"<<endl;)voidprint()(cout<<"a="<<a<<endl;)protected:inta;);classCDerive:publicCBa
27、se(public:CDerive(inta,intb,intc):CBase(a),b(b),c(c)(cout<<"derivestructure"<<endl;)CDerive()(cout<<"derivedestructure"<<endl;)voidprint()(CBase:print();cout<<"b.a="<<b.a<<endl;cout<<"c="<<c<<endl;)pr
28、ivate:CBaseb;intc;);voidmain()(CDerived(1,2,3);d.print();)*/練習(xí)(三)#include<iostream.h>#include<math.h>classCPoint(private:floatx,y;public:CPoint(floatx1,floaty1):x(x1),y(y1)(cout<<"CPoint基類構(gòu)造函數(shù)已調(diào)用"<<endl;)voiddisplay()(cout<<"x="<<CPoint:x<<""<<"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度物流運(yùn)輸借款協(xié)議方合同
- 二零二五年度航空航天用高溫合金委托生產(chǎn)協(xié)議
- 二零二五年度智能共享單車無償使用合同范本
- 2025年度門診部護(hù)士長聘任與管理服務(wù)合同
- 職業(yè)插畫師插畫設(shè)計(jì)服務(wù)合同
- 房地產(chǎn)經(jīng)紀(jì)人獨(dú)家代理合同書
- 產(chǎn)品創(chuàng)意與策劃流程手冊
- 歷史文物保護(hù)與遺址發(fā)掘試題及答案
- 人工智能輔助的智能環(huán)境保護(hù)監(jiān)測系統(tǒng)開發(fā)協(xié)議
- 大健康產(chǎn)業(yè)數(shù)字化健康服務(wù)平臺建設(shè)
- 中建10t龍門吊安拆安全專項(xiàng)施工方案
- 國內(nèi)外測井技術(shù)現(xiàn)狀與展望文檔
- 骨科術(shù)后譫妄患者的護(hù)理
- 大模型專題:2024大模型技術(shù)及其在金融行業(yè)的應(yīng)用探索報(bào)告
- 約定工資結(jié)清協(xié)議書(2篇)
- 天津地區(qū)高考語文五年高考真題匯編-語言文字應(yīng)用
- 特殊作業(yè)安全管理監(jiān)護(hù)人專項(xiàng)培訓(xùn)課件
- 鶴壁海格龍升3萬噸溴系列新材料產(chǎn)品環(huán)評資料環(huán)境影響
- 道路運(yùn)輸企業(yè)兩類人員安全考核試題及答案
- 衛(wèi)生技術(shù)人員準(zhǔn)入制度
- 2024屆全國新高考英語復(fù)習(xí)-讀后續(xù)寫微寫作
評論
0/150
提交評論