




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、. 實(shí)驗(yàn)三繼承和派生類實(shí)驗(yàn)?zāi)康暮鸵?1理解類的繼承的概念,能夠定義和使用類的繼承關(guān)系。 2掌握派生類的聲明與定義方法。 3熟悉公有派生和私有派生的特性。 4學(xué)習(xí)虛基類在解決二義性問題中的作用。實(shí)驗(yàn)容1.先閱讀下面的程序,分析程序運(yùn)行的結(jié)果,然后再上機(jī)運(yùn)行程序,驗(yàn)證自己分析的結(jié)果是否正確。1#includeclass Apublic:A()coutA:A() called.n;A()coutA:A() called.n;class B:public Apublic:B(int i)coutB:B() called.n;buf=new chari;B()delete buf;coutB:B()
2、called.n;private:char *buf;void main()B b(10);2#includeclass Apublic:A(int a,int b):*(a),y(b)coutA constructor.endl;void Add(int a,int b)*+=a;y+=b;void display()cout(*,y)endl;A()coutdestructor A.endl;private:int *,y;class B:private Aprivate:int i,j;A Aobj;public:B(int a,int b,int c,int d):A(a,b),i(c
3、),j(d),Aobj(1,1)coutB constructor.endl;void Add(int *1,int y1,int *2,int y2)A:Add(*1,y1);i+=*2;j+=y2;void display()A:display();Aobj.display();cout(i,j)endl;B()coutdestructor B.endl;void main()B b(1,2,3,4);b.display();b.Add(1,3,5,7);b.display();3#includeclass Apublic:A(int a):*(a)coutA constructor.*e
4、ndl;int f()return +*;A()coutdestructor A.endl;private:int *;class B:public virtual Aprivate:int y;A Aobj;public:B(int a,int b,int c):A(a),y(c),Aobj(c)coutB constructor.yendl;int f()A:f();Aobj.f();return +y;void display()coutA:f()tAobj.f()tf()endl;B()coutdestructor B.endl;class C:public Bpublic:C(int
5、 a,int b,int c):B(a,b,c),A(0)coutC constructor.endl;class D:public C,virtual public Apublic:D(int a,int b,int c):C(a,b,c),A(c)coutD constructor.endl;D()coutdestructor D.endl;void main()D d(7,8,9);d.f();d.display();4#includeclass Base1public:Base1()coutclass Base1!endl;class Base2public:Base2()coutcl
6、ass Base2!endl;class Level1:public Base2,virtual public Base1public:Level1()coutclass Level1!endl;class Level2:public Base2,virtual public Base1public:Level2()coutclass Level2!endl;class TopLevel:public Level1,virtual public Level2public:TopLevel()coutclass TopLevel!endl;void main()TopLevel obj;2.調(diào)試
7、以下程序,并對程序進(jìn)展修改后再調(diào)試,指出調(diào)試中的出錯(cuò)原因。#include class Apublic:void seta(int i)a=i;int geta()return a;public:int a;class B:public Apublic:void setb(int i)b=i;int getb()return b;void show()coutA:a=aendl; /語句9public:int b;void main()B bb;/語句1bb.seta(6);/語句2bb.setb(3);/語句3bb.show();/語句4coutA:a=bb.aendl;/語句5coutB:
8、b=bb.bendl;/語句6coutA:a=bb.geta()endl;/語句7coutB:b=bb.getb()endl;/語句8按以下要求對程序進(jìn)展修改,然后調(diào)試,對出現(xiàn)的錯(cuò)誤分析其原因。1將派生類B的繼承方式改為private時(shí),會出現(xiàn)哪些錯(cuò)誤和不正?,F(xiàn)象?為什么?2將派生類B的繼承方式改為protected時(shí),會出現(xiàn)哪些錯(cuò)誤和不正?,F(xiàn)象?為什么?3將派生類B的繼承方式恢復(fù)為public后,再將類A中數(shù)據(jù)成員a的權(quán)限改為private時(shí),會出現(xiàn)哪些錯(cuò)誤和不正常現(xiàn)象?為什么?4派生類B的繼承方式仍為public,將類A中數(shù)據(jù)成員a的權(quán)限改為protected時(shí),會出現(xiàn)哪些錯(cuò)誤和不正常現(xiàn)象
9、?為什么? 3.定義一個(gè)類MyArray,類中可以存放一組整數(shù)。類的定義如下: class MyArray public: MyArray(int len);/初始化,動態(tài)申請存儲空間 MyArray();/對象完畢時(shí),釋放所占用的存儲空間 void Input();/輸入數(shù)據(jù) void Display();/顯示數(shù)據(jù) protected: int *alist; /指向動態(tài)申請的一組空間 int length; /整數(shù)的個(gè)數(shù) ;基類中有構(gòu)造函數(shù)、析構(gòu)函數(shù)、輸入數(shù)據(jù)和輸出數(shù)據(jù)的函數(shù)。1實(shí)現(xiàn)該類并設(shè)計(jì)主函數(shù)對所定義的類進(jìn)展調(diào)試。下同。2由MyArray派生一個(gè)類SortArray,在該類中定義函
10、數(shù)實(shí)現(xiàn)排序功能。3由MyArray派生一個(gè)類ReArray,在該類中定義函數(shù)實(shí)現(xiàn)數(shù)據(jù)前后逆轉(zhuǎn)功能。4由MyArray派生一個(gè)類AverArray,在該類中定義函數(shù)Aver求解類中所有數(shù)據(jù)的平均值。5定義NewArray類,同時(shí)繼承了SortArray, ReArray和AverArray,使得NewArray類的對象同時(shí)具有排序、逆轉(zhuǎn)和求平均值的功能。在繼承的過程中聲明為虛基類,體會虛基類在解決二義性問題中的作用。參考答案非權(quán)威,僅僅是我自己的理解,如有錯(cuò)誤,歡送批評指正!1.11.21.31.42.1主函數(shù)中語句2、語句5、語句7出現(xiàn)錯(cuò)誤。因?yàn)锽采用私有繼承,所以A中的公有函數(shù)在B中是變?yōu)樗?/p>
11、有函數(shù),主函數(shù)中不能B中的私有函數(shù)。2主函數(shù)中語句2、語句5、語句7出現(xiàn)錯(cuò)誤。因?yàn)锽采用保護(hù)繼承,所以A中的公有函數(shù)在B中是變?yōu)楸Wo(hù)函數(shù),主函數(shù)中不能B中的保護(hù)函數(shù)。3主函數(shù)中語句9、語句5出現(xiàn)錯(cuò)誤。因?yàn)锽采用公有繼承,所以B中和主函數(shù)中不能A中的私有函數(shù)。4主函數(shù)中語句5出現(xiàn)錯(cuò)誤。因?yàn)锽采用公有繼承,所以A中保護(hù)成員在B中仍為保護(hù)成員,B中可以A中的保護(hù)成員,但不能通過類的對象類的保護(hù)成員。3.1#include class Myarrayprotected:int *alist; /指向動態(tài)申請的一組空間int length;/整數(shù)的個(gè)數(shù)public: Myarray(int len)/初
12、始化,動態(tài)申請存儲空間 alist=new intlen;length=len; Myarray()/對象完畢時(shí),釋放所占用的存儲空間 delete(alist);coutendl再見!endl; void Input()/輸入數(shù)據(jù) int i; for(i=0;ilength;i+) cout輸入數(shù)組的第i+1alisti; void Display()/顯示數(shù)據(jù) coutn數(shù)組的成員為:n;for(int i=0;ilength;i+) coutalisti ;coutendl; ;void main()Myarray A(3);A.Input();A.Display();2#includ
13、e class Myarrayprotected:int *alist; /指向動態(tài)申請的一組空間int length;/整數(shù)的個(gè)數(shù)public: Myarray(int len)/初始化,動態(tài)申請存儲空間 alist=new intlen;length=len;coutMyarray 初始化.endl; Myarray()/對象完畢時(shí),釋放所占用的存儲空間 delete(alist);coutendl再見!endl; void Input()/輸入數(shù)據(jù) int i; for(i=0;ilength;i+) cout輸入數(shù)組的第i+1alisti; void Display()/顯示數(shù)據(jù) co
14、utn本數(shù)組成員依次為:n;for(int i=0;ilength;i+) coutalisti ;coutendl; ;class SortArray:virtual public Myarraypublic: SortArray(int n):Myarray(n) coutSortArray 初始化.endl;void sort() int i,j,k,temp; for(i=0;ilength-1;i+) k=i;for(j=i+1;jlength;j+) if(alistjalistk) k=j; temp=alisti; alisti=alistk; alistk=temp; ;vo
15、id main()SortArray B(4);B.Input();B.Display();coutendl現(xiàn)在將數(shù)組成員進(jìn)展從小到大排序:endl;B.sort();B.Display();3#include class Myarrayprotected:int *alist; /指向動態(tài)申請的一組空間int length;/整數(shù)的個(gè)數(shù)public: Myarray(int len)/初始化,動態(tài)申請存儲空間 alist=new intlen;length=len;coutMyarray 初始化.endl; Myarray()/對象完畢時(shí),釋放所占用的存儲空間 delete(alist);c
16、outendl再見!endl; void Input()/輸入數(shù)據(jù) int i; for(i=0;ilength;i+) cout輸入數(shù)組的第i+1alisti; void Display()/顯示數(shù)據(jù) coutn本數(shù)組成員依次為:n;for(int i=0;ilength;i+) coutalisti ;coutendl; ;class ReArray: virtual public Myarraypublic: ReArray(int n):Myarray(n) coutReArray 初始化.endl; void turn()int i,t,j=length-1;for(i=0;ilen
17、gth/2;i+,j-)t=alisti;alisti=alistj;alistj=t;void main()ReArray B(4);B.Input();B.Display();coutendl現(xiàn)在將數(shù)組成員進(jìn)展前后逆轉(zhuǎn):endl;B.turn();B.Display();4#include class Myarrayprotected:int *alist; /指向動態(tài)申請的一組空間int length;/整數(shù)的個(gè)數(shù)public: Myarray(int len)/初始化,動態(tài)申請存儲空間 alist=new intlen;length=len;coutMyarray 初始化.endl;
18、Myarray()/對象完畢時(shí),釋放所占用的存儲空間 delete(alist);coutendl再見!endl; void Input()/輸入數(shù)據(jù) int i; for(i=0;ilength;i+) cout輸入數(shù)組的第i+1alisti; void Display()/顯示數(shù)據(jù) coutn本數(shù)組成員依次為:n;for(int i=0;ilength;i+) coutalisti ;coutendl; ;class AverArray:virtual public Myarraypublic:AverArray(int n):Myarray(n) coutAverArray 初始化.en
19、dl; float getaver() float aver; int sum=0,i; for(i=0;ilength;i+) sum+=alisti; aver=(float)sum/length; return aver; ;void main()AverArray B(3);B.Input();B.Display();coutendl數(shù)組成員的平均值為:;coutB.getaver() endl;5#include class Myarrayprotected:int *alist; /指向動態(tài)申請的一組空間int length;/整數(shù)的個(gè)數(shù)public: Myarray(int le
20、n)/初始化,動態(tài)申請存儲空間 alist=new intlen;length=len;coutMyarray 初始化.endl; Myarray()/對象完畢時(shí),釋放所占用的存儲空間 delete(alist);coutendl再見!endl; void Input()/輸入數(shù)據(jù) int i; for(i=0;ilength;i+) cout輸入數(shù)組的第i+1alisti; void Display()/顯示數(shù)據(jù) coutendl本數(shù)組成員依次為:;for(int i=0;ilength;i+) coutalisti ;coutendl; ;class SortArray:virtual p
21、ublic Myarray/從小到大排序public: SortArray(int n):Myarray(n) coutSortArray 初始化.endl;void get_SortArray() int i,j,k,temp; for(i=0;ilength-1;i+) k=i;for(j=i+1;jlength;j+) if(alistjalistk) k=j; temp=alisti; alisti=alistk; alistk=temp; ;class ReArray: virtual public Myarray/前后逆轉(zhuǎn)public: ReArray(int n):Myarray(n) coutReArray 初始化.endl; void get_ReArray()int i,
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 尋常痤瘡的臨床護(hù)理
- 生涯發(fā)展指導(dǎo)課:《規(guī)劃的人生更精彩》學(xué)習(xí)心得體會模版
- 買賣房過渡合同范例
- 人防工程租賃合同范例
- 2025年餐飲服務(wù)員年度工作總結(jié)模版
- 個(gè)人月度工作總結(jié)模版
- 2024年太陽能組件生產(chǎn)裝備項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 2025年小學(xué)數(shù)學(xué)組教研活動總結(jié)模版
- 保險(xiǎn)推廣合同范例
- 個(gè)人桑蠶養(yǎng)殖合同范例
- 新能源汽車維護(hù)與故障診斷課件 項(xiàng)目一 安全防護(hù)知識與應(yīng)用
- 2024ESC心房顫動管理指南解讀
- 2024年計(jì)算機(jī)軟件水平考試-高級系統(tǒng)架構(gòu)師考試近5年真題附答案
- 浙江省2024年全國中學(xué)生奧林匹克數(shù)學(xué)競賽初賽試題 含解析
- 2024-2025學(xué)年小學(xué)信息技術(shù)(信息科技)六年級全一冊義務(wù)教育版(2024)教學(xué)設(shè)計(jì)合集
- 九型人格之職場心理學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 基于機(jī)器學(xué)習(xí)的緩存優(yōu)化
- 肝損傷患者的護(hù)理
- 學(xué)術(shù)論文文獻(xiàn)閱讀與機(jī)助漢英翻譯智慧樹知到答案2024年重慶大學(xué)
- 老年心房顫動診治中國專家共識(2024)解讀
- 新高考背景下2025屆高三歷史一輪復(fù)習(xí)策略講座
評論
0/150
提交評論