




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)五 繼承 基類對(duì)象與派生類對(duì)象一、實(shí)驗(yàn)?zāi)康?理解公有繼承、私有繼承方式下,類及對(duì)象的訪問權(quán)限;掌握公有繼承方式下派生類對(duì)象訪問基類私有成員、保護(hù)成員的方法;了解私有繼承方式下派生類對(duì)象訪問基類私有成員、保護(hù)成員的方法。2理解繼承的傳遞性;掌握公有繼承方式下,間接派生類對(duì)象訪問間接基類私有成員、保護(hù)成員的方法;了解私有繼承方式下間接派生類對(duì)象訪問間接基類私有成員、保護(hù)成員的方法。3理解基類與派生類對(duì)象、指針、引用的兼容性規(guī)則,熟悉派生類對(duì)象、指針、引用作為函數(shù)參數(shù)的各種方式。二、實(shí)驗(yàn)學(xué)時(shí)課內(nèi)實(shí)驗(yàn):2課時(shí) 課外練習(xí):2課時(shí)三 本實(shí)驗(yàn)涉及的新知識(shí) 類及對(duì)象的訪問權(quán)限1派生類對(duì)基類成員的訪問權(quán)限由
2、實(shí)驗(yàn)四可知,在不同繼承(派生)方式下,基類的成員在派生類中(作用域內(nèi))的訪問權(quán)限不同。 基類的私有成員無論哪種繼承方式,基類的私有成員在派生類的作用域內(nèi)均不可見,只能通過基類的公有成員函數(shù)訪問。 基類的保護(hù)成員、公有成員在公有繼承下,基類的保護(hù)成員、公有成員在派生類的訪問特性不變,在派生類的作用域內(nèi)可以直接訪問,也可以調(diào)用基類的公有成員訪問;在私有繼承方式下,基類的保護(hù)成員、公有成員均改變成私有成員,但在派生類作用域內(nèi)仍可以直接訪問(在類中,可以訪問自身的所有成員)。2類對(duì)象對(duì)類成員的訪問權(quán)限無論是基類對(duì)象或是派生類的對(duì)象,都只能訪問所屬類的公有成員,而私有成員、保護(hù)成員只能通過調(diào)用所屬類的公
3、有成員函數(shù)訪問。3派生類對(duì)象對(duì)基類私有數(shù)據(jù)成員、保護(hù)成員的訪問 公有繼承(public)方式 直接通路 在公有派生方式下,派生類對(duì)象可直接調(diào)用基類的公有成員函數(shù)訪問基類的私有成員、保護(hù)成員:派生類對(duì)象基類公有成員函數(shù)基類的私有成員派生類對(duì)象基類公有成員函數(shù)基類的保護(hù)成員 間接通路派生類對(duì)象派生類公有成員函數(shù)基類公有成員函數(shù)基類的私有成員派生類對(duì)象派生類公有成員函數(shù)基類公有成員函數(shù)基類的保護(hù)成員派生類對(duì)象派生類公有成員函數(shù)基類的保護(hù)成員 私有繼承(public)方式 間接通路 在私有派生方式下,直接通路被隔斷,只能用間接方式派生類對(duì)象派生類公有成員函數(shù)基類公有成員函數(shù)基類的私有成員派生類對(duì)象派生
4、類公有成員函數(shù)基類公有成員函數(shù)基類的保護(hù)成員派生類對(duì)象派生類公有成員函數(shù)基類的保護(hù)成員 聲明調(diào)整機(jī)制在C+提供了一種聲明調(diào)整機(jī)制,即在私有繼承的派生類中重新將基類的公有成員函數(shù)聲明為公有的,這樣派生類對(duì)象就可以直接訪問基類的公有成員。格式:public:基類名:基類公有成員函數(shù)名; 繼承的傳遞性派生類的繼承具有傳遞性,即派生類既可以繼承直接基類的數(shù)據(jù)結(jié)構(gòu)及操作方法,也可繼承間接基類的數(shù)據(jù)結(jié)構(gòu)及操作方法。由于公有繼承方式與私有繼承方式在派生類中訪問基類成員的權(quán)限不一樣,其傳遞方法也是不同的。1公有繼承的傳遞性公有繼承方式上,基類中的公有成員、保護(hù)成員在派生類中的訪問權(quán)限不改變。即:派生類(直接派
5、生、間接派生)的成員函數(shù)可直接調(diào)用訪問基類(直接基類、間接基類)的公有成員及保護(hù)成員;派生類(直接派生、間接派生)的對(duì)象可以調(diào)用基類(直接基類、間接基類)的公有成員,并通過基類的公有成員函數(shù)訪問基類的私有成員。公有繼承方式下的傳遞性為: 第一條消息通路:基類對(duì)象可通過基類的公有成員函數(shù)訪問其私有數(shù)據(jù)成員(同上)。 第二條消息通路:直接派生類對(duì)象可以調(diào)用基類的公有成員函數(shù)訪問基類的私有成員; 第三條消息通路:間接派生類對(duì)象可直接調(diào)用間接基類的公有成員函數(shù)訪問間接基類的私有數(shù)據(jù)成員。2私有繼承的傳遞性私有繼承方式下,基類的公有成員、保護(hù)成員均變?yōu)榱怂接械模缮悓?duì)象不能直接訪問基類的公有成員、保護(hù)
6、成員,即不能通過基類的公有成員函數(shù)訪問基類的私有成員,而必須通過其它方法打開其消息通路。私有繼承方式下的傳遞性為: 第一條消息通路:基類對(duì)象可通過基類的公有成員函數(shù)訪問其私有數(shù)據(jù)成員。 第二條消息通路:在直接派生類中重新編寫公有成員函數(shù),通過調(diào)用基類的公有成員函數(shù)訪問基類的私有成員。 第三條消息通路:接力式的訪問,即在間接派生類中重新編寫公有成員函數(shù),調(diào)用直接基類的公有成員函數(shù),從而調(diào)用間接基類的公有成員函數(shù)訪問間接基類的私有成員。實(shí)際應(yīng)用中,主要采用公有繼承方式,因此重點(diǎn)應(yīng)掌握公有繼承方式下傳遞性。 賦值兼容性規(guī)則在公有繼承方式下,基類與派生類派生類具有以下賦值規(guī)則:1可以將派生類對(duì)象賦值給
7、基類對(duì)象(不能將基類對(duì)象賦值給派生類對(duì)象)。格式:基類對(duì)象=派生類對(duì)象;2基類的對(duì)象指針可以指向基類對(duì)象,也可以指向派生類對(duì)象(派生類指針只能指向派生類對(duì)象,不能指向基類對(duì)象)。格式:基類對(duì)象指針=派生類對(duì)象指針;或:基類對(duì)象指針=&派生類對(duì)象;基類指針指向派生類對(duì)象后,可直接訪問該對(duì)象從基類繼承的公有成員,如果要訪問派生類新增的公有成員,需要用強(qiáng)制類型轉(zhuǎn)換成派生類指針。格式:(派生類名*)基類指針名)->新增公有成員;3可以將基類的引用名定義為派生類的對(duì)象的別名。格式:基類名 &基類的引用名=派生類對(duì)象名4基類和派生對(duì)象作為函數(shù)的參數(shù)在公有繼承方式下,可以用基類的對(duì)象、
8、指針、引用作為形參,用派生類的對(duì)象、對(duì)象地址(指針)作為實(shí)參。格式1:函數(shù)原型:<返回類型>函數(shù)名(基類名 對(duì)象名,);調(diào)用語句:函數(shù)名(派生類對(duì)象名,);其中,形參中的基類通常是類層次結(jié)構(gòu)中的最頂層,派生類對(duì)象可以是類層次結(jié)構(gòu)中的任一層,此種方式為傳值調(diào)用。格式2:函數(shù)原型:<返回類型>函數(shù)名(基類名 *指針名,);調(diào)用語句:函數(shù)名(&派生類對(duì)象名, );其中,形參中的基類指針通常是類層次結(jié)構(gòu)中的最頂層,派生類對(duì)象可以是類層次結(jié)構(gòu)中的任一層,此種方式為傳址調(diào)用。格式3:函數(shù)原型:<返回類型>函數(shù)名(基類名 &引用名,);調(diào)用語句:函數(shù)名(派
9、生類對(duì)象名, );同上,此種方式為傳址調(diào)用。四、實(shí)驗(yàn)內(nèi)容 驗(yàn)證及認(rèn)知實(shí)驗(yàn)按要求調(diào)試下列程序,并回答相關(guān)問題。程序1(exp_501.cpp)#include<iostream>using namespace std;class Base /基類Base的定義 private: float x,y; public:Base(float a=0,float b=0)x=a;y=b;float get_x() return x; float get_y() return y; void print(void) cout<<" x="<<x<
10、;<" y="<<y;class Derived:public Base /派生類Derived的定義公有繼承 private: float z; public:Derived(float a=0,float b=0,float c=0):Base(a,b) z=c;/派生類的構(gòu)造函數(shù)定義float get_z() return z; void print(void) Base:print(); cout<<" z="<<z;void main(void) Base a(10.0,20.0); Derived b
11、(10.0,20.0,30.0); a.print();cout<<endl; b.print();cout<<endl; cout<<" x="<<b.get_x()<<" y="<<b.get_y()<<" z="<<b.get_z()<<endl;問題: 編譯運(yùn)行程序的輸出結(jié)果為: 程序中的“b.get_x()”、“b.get_y()”表明在公有繼承方式下,派生類對(duì)象可以直接訪問基類的 。 將程序中的派生類定義由“publ
12、ic”繼承方式改為“private”繼承方式,重新調(diào)試程序?qū)⒊霈F(xiàn) ,原因是 。 在派生類的公有成員定義(即“public:”)下面加上“Base:get_x;Base:get_y;”,再重新編譯運(yùn)行程序,將得到正確的結(jié)果。“Base:get_x;Base:get_y;”稱為 。程序2(exp_502.cpp)#include<iostream>using namespace std;class A private: float x; public:A(float a=0)x=a;float get_x() return x;class B:public A private: flo
13、at y; public:B(float a=0,float b=0):A(a) y=b; float get_y() return y;class C:public B private: float z; public:C(float a=0,float b=0,float c=0):B(a,b) z=c; float get_z() return z;void main(void) C ob(10.0,20.0,30); cout<<" x="<<ob.get_x()<<" y="<<ob.get_y(
14、)<<" z="<<ob.get_z()<<endl;問題: 編譯運(yùn)行程序的輸出結(jié)果為: 將“class B:public A ” 、“class C:public B ”的繼承方式改為“private”,重新編譯程序會(huì)出現(xiàn) ,原因是 。 在類“B”中增加公有成員函數(shù):float get_x() return A:get_x();在類“C”中增加公有成員函數(shù):float get_x() return B:get_x();float get_y() return B:get_y();重新編譯運(yùn)行程序。 知識(shí)應(yīng)用實(shí)驗(yàn)1分析下列程序,寫出程序的
15、輸出結(jié)果,再上機(jī)運(yùn)行程序驗(yàn)證其正確性,如果不正確,請(qǐng)認(rèn)真分析出錯(cuò)原因。程序3(exp_503.cpp)#include<iostream>using namespace std;class Base 你分析的程序輸出結(jié)果是: private:float x,y; public:Base(float a=0,float b=0)x=a;y=b;void setBase(float a=0,float b=0)x=a;y=b;void print(void)程序的實(shí)際輸出結(jié)果是: cout<<" x="<<x<<" y=
16、"<<y;class Derived:public Base private: float z; public:Derived(float a=0,float b=0,float c=0):Base(a,b) z=c; void setDerived(float a=0,float b=0,float c=0) Base:setBase(a,b);z=c;void print(void) Base:print(); cout<<" z="<<z;void main(void) Base ob1; Derived ob2; ob2
17、.setDerived(25.5,35.5,50.5); ob1=ob2; ob1.print();cout<<endl; ob2.print();cout<<endl; Base *pb=&ob1;pb->print();cout<<endl; Derived *pd=&ob2;pd->print();cout<<endl; Base &cb=ob2; cb.print();cout<<endl;程序4(exp_504.cpp)#include<iostream>using names
18、pace std;class Base private:float x,y; public:Base(float a=0,float b=0)x=a;y=b;程序的實(shí)際輸出結(jié)果是:你分析的程序輸出結(jié)果是:void print(void)cout<<" x="<<x<<" y="<<y;class Derived:public Base private: float z; public:Derived(float a=0,float b=0,float c=0):Base(a,b) z=c; void pri
19、nt(void)Base:print();cout<<" z="<<z;void fun1(Base ob) /普通函數(shù) ob.print();cout<<endl;void fun2(Base &ob) /普通函數(shù) ob.print();cout<<endl;void fun3(Base *ob) /普通函數(shù) ob->print();cout<<endl;void main(void) Derived ob(15.0,25.0,35.0); fun1(ob); fun2(ob); fun3(&
20、;ob);2完善、調(diào)試通過下列程序,并按所要求回答問題。程序5(exp_505.cpp)#include<iostream>using namespace std;class Base /基類Base的定義 private:float x,y; public:Base(float a=0,float b=0)x=a;y=b;void setBase(float a=0,float b=0)x=a;y=b;float getx(void) return x; float gety(void) return y;class Derived:public Base /派生類Derived的定義注意定義方法 private: float z; public:Derived(float a=0,float b=0,float c=0):Base(a,b) z=c; /派生類的構(gòu)造函數(shù)定義 void setDerived(float a=0,float b=0,float c=0) Base:setBase(a,b);z=c;f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 借用模具合同范本
- 賣房按揭付款合同范本
- 農(nóng)用設(shè)備維護(hù)合同范本
- 主板維修培訓(xùn)合同范本
- 務(wù)工承攬合同范例
- 代理報(bào)稅公司合同范本
- 出版補(bǔ)充協(xié)議合同范本
- 中介裝修出售合同范本
- 公司雕刻外包合同范本
- 單位退休合同范本
- 2025年公務(wù)員考試《行測》模擬題及答案(詳細(xì)解析)
- 2024年黑龍江省牡丹江市中考?xì)v史試卷
- 滬科版八年級(jí)物理知識(shí)點(diǎn)總結(jié)
- 孫權(quán)勸學(xué)(原卷版)-2024年中考語文之文言文對(duì)比閱讀
- 高速公路日常清掃與養(yǎng)護(hù)方案
- 風(fēng)電epc合同模板
- 2024年新人教版一年級(jí)數(shù)學(xué)下冊(cè)《第2單元第5課時(shí) 20以內(nèi)的退位減法解決問題(1)》教學(xué)課件
- 2022年陜西省普通高校職業(yè)教育單獨(dú)招生統(tǒng)一考試語文甲(A)試題
- 失業(yè)保險(xiǎn)待遇申領(lǐng)表
- 2024-2025學(xué)年初中信息技術(shù)(信息科技)第二冊(cè)河北大學(xué)版(第3版)教學(xué)設(shè)計(jì)合集
- 期末測試卷(一)(試題)2023-2024學(xué)年二年級(jí)上冊(cè)數(shù)學(xué)蘇教版
評(píng)論
0/150
提交評(píng)論