




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第九章繼承與派生類92 典型例題分析與解答例題1:下列對(duì)派生類的描述中,( )是錯(cuò)誤的。A 一個(gè)派生類可以作為另一個(gè)派生類的基類B 派生類至少有一個(gè)基類C 派生類的成員除了它自己的成員外,還包含了它的基類成員D 派生類中繼承的基類成員的訪問(wèn)權(quán)限到派生類保持不變答案:D分析:一個(gè)派生類可以作為另一個(gè)派生類的基類。無(wú)論是單繼承還是多繼承,派生類至少有一個(gè)基類。派生類的成員除了它自己的成員外,還包含了它的基類成員。派生類中繼承的基類成員的訪問(wèn)權(quán)限到派生類受繼承方式影響
2、的,對(duì)于私有繼承,基類的public,protected成員在派生類中作為private成員;對(duì)于公有繼承,基類的public,protected成員在派生類中訪問(wèn)屬性不變;對(duì)于保護(hù)繼承,基類的public、protected成員在派生類中作為protected成員。例題2:派生類的對(duì)象對(duì)它的哪一類基類成員是可以訪問(wèn)的?( ) A公有繼承的基類的公有成員
3、0; B. 公有繼承的基類的保護(hù)成員 C. 公有繼承的基類的私有成員 D. 保護(hù)繼承的基類的公有成員答案:A分析:公有繼承的基類的公有成員在派生類中保持公有訪問(wèn)權(quán)限,所以派生類對(duì)象可以訪問(wèn)它;公有繼承的基類的保護(hù)成員在派生類中保持保護(hù)訪問(wèn)權(quán)限,所以派生類對(duì)象不可以訪問(wèn)它;基類的私有成員不能被派生到派生類中,所以派生類對(duì)象不可以訪問(wèn)它;保護(hù)繼承的基類的公有成員在派生
4、類中變成保護(hù)的訪問(wèn)權(quán)限,所以派生類對(duì)象不可以訪問(wèn)它。 例題3:關(guān)于多繼承二義性的描述,( )是錯(cuò)誤的。A 派生類的多個(gè)基類中存在同名成員時(shí),派生類對(duì)這個(gè)成員訪問(wèn)可能出現(xiàn)二義性B 一個(gè)派生類是從具有共同的間接基類的兩個(gè)基類派生來(lái)的,派生類對(duì)該公共基類的訪問(wèn)可能出現(xiàn)二義性C 解決二義性最常用的方法是作用域運(yùn)算符對(duì)成員進(jìn)行限定D 派生類和它的基類中出現(xiàn)同名函數(shù)時(shí),將可能出現(xiàn)二義性答案:D分析:出現(xiàn)二義性有兩種情況:調(diào)用不同基類的相同成員時(shí)可能出現(xiàn)二義性;訪問(wèn)
5、共同基類的成員時(shí)可能出現(xiàn)二義性。消除二義性的方法是采用作用域運(yùn)算符。派生類和它的基類中出現(xiàn)同名函數(shù)時(shí),不可能出現(xiàn)二義性。 例題4:多繼承派生類構(gòu)造函數(shù)構(gòu)造對(duì)象時(shí),( )被最先調(diào)用。A派生類自己的構(gòu)造函數(shù) B虛基類的構(gòu)造函數(shù)C非虛基類的構(gòu)造函數(shù) D派生類中子對(duì)象類的構(gòu)造函數(shù)答案:分析:多繼承派生類構(gòu)造函數(shù)構(gòu)造對(duì)象時(shí),構(gòu)造函數(shù)的調(diào)順序
6、是:虛基類的構(gòu)造函數(shù),派生類中子對(duì)象類的構(gòu)造函數(shù), 派生類自己的構(gòu)造函數(shù)。 例題5: C+類體系中,能被派生類繼承的是( )。A構(gòu)造函數(shù) B虛函數(shù) C析構(gòu)函數(shù) D友元函數(shù)答案:分析:C+類體系中,構(gòu)造函數(shù)、析構(gòu)函數(shù)和友元函數(shù)是不能被派生類繼承的 例題6:設(shè)有基類定義:class Cbase private: int a;
7、0; protected: int b; public: int c;派生類采用何種繼承方式可以使成員變量b成為自己的私有成員( )A. 私有繼承 B.保護(hù)繼承C. 公有繼承
8、60; D.私有、保護(hù)、公有均可答案:分析:私有繼承時(shí),基類的protected成員在派生類中作為private成員。 例題7:C+將類繼承分為 () 和 () 兩種。答案:()單繼承()多繼承分析:派生類可以只從一個(gè)基類中派生,也可以從多個(gè)基類中派生。從一個(gè)基類中派生的繼承方式稱為單繼
9、承。從多個(gè)基類中派生的繼承方式稱為多繼承。 例題8:派生類可以定義其_中不具備的數(shù)據(jù)和操作。答案:基類分析:派生類是從基類派生的,派生類包含了它所有基類的除構(gòu)造函數(shù)、析構(gòu)函數(shù)之外的所有成員,同時(shí)還擁有它自己的新成員。 例題9:派生類構(gòu)造函數(shù)的初始化列表中包含_。答案:初始化基類數(shù)據(jù)成員、新增內(nèi)嵌對(duì)象數(shù)據(jù)及新增一般成員數(shù)據(jù)所需要的全部參數(shù)。 例題10:在繼承機(jī)制下,當(dāng)對(duì)象消亡時(shí),編譯系統(tǒng)先執(zhí)行 (1) 的析構(gòu)函數(shù),然后才執(zhí)行 (2) 的析構(gòu)函數(shù),最后執(zhí)行&
10、#160; (3) 的析構(gòu)函數(shù)。答案:(1)派生類(2)派生類中子對(duì)象類(3)基類分析:派生類的析構(gòu)函數(shù)的執(zhí)行次序與構(gòu)造函數(shù)正好相反,先調(diào)用派生類的析構(gòu)函數(shù),再調(diào)用派生類中子對(duì)象類的析構(gòu)函數(shù),最后調(diào)用基類的析構(gòu)函數(shù)。 例題11:設(shè)有以下類的定義:class A class B: protected A
11、60; class C: private B int A1; int b1; int c1;protected:
12、60;int A2; protected: int b2; protected: int c2;public: int A3; public: int b3;
13、60; public: int c3; 請(qǐng)按訪問(wèn)權(quán)限寫出派生類C中具有的成員
14、。私有成員: (1) 保護(hù)成員:
15、0; (2) 公有成員: (3)
16、; 。答案:(1)c1、b2、b3、A2、A3 (2)c2 (3)c3分析:類有它自己的私有成員b1、保護(hù)成員b2和公有成員有b3,另外類是以保護(hù)方式從類中派生出來(lái)的,所以類保護(hù)成員2和公有成員A3在類中都變成保護(hù)類型的;類有自己的私有成員c1、
17、保護(hù)成員c2和公有成員有c3,類是以私有方式從B類中派生出來(lái)的,所以類中的b2、b3、A2和A3在類中都變成私有的訪問(wèn)方式。 例題12:指出并改正下面程序中的錯(cuò)誤。#include<iostream.h>class Point int x,y; public: Point(int a=0,int b=0) x=a; y=b; void move(int xoffset,int yoffset) x+=xoffset; y+=yoffset
18、; int getx() return x; int gety() return y;class Rectangle:protected Point int length,width; public: Rectangle(int x,int y,int l,int w):Point(x,y)
19、60; length=l;width=w; int getlength()return length; int getwidth()return width;void main() Rectangle r(0,0,8,4); r.move(23,56);cout<<r.getx()<<","<<r.gety()<<","<<r.getlength()<&l
20、t;","<<r.getwidth()<<endl;分析:保護(hù)繼承方式使基類的public成員在派生類中的訪問(wèn)屬性變?yōu)閜rotected,所以派生類Rectangle的對(duì)象r不能直接訪問(wèn)基類的成員函數(shù)move()、getx()和gety()。其改正方法有兩種:1)將Rectangle的繼承方式改為公有繼承public;2)在Rectangle類中重定義move(),getx()和gety()函數(shù),覆蓋基類的同名函數(shù)。void Rectangle:move(int xoffset,int yoffset)Point:move(xoffset,yoffs
21、et);void Rectangle:getx()return Point:getx();void Rectangle:gety()return Point:gety(); 例題13:指出并改正下面程序中的錯(cuò)誤。#include<iostream.h>class A public: int x; A(int a=0) x=a; void display() cout<<"A.x="<<x<
22、;<endl; ;class B public: int x; B(int a=0) x=a; void display() cout<<"B.x="<<x<<endl; ;class C:public A,public B int y; public: C(int a,int b,int c) :A(a),B(b)
23、160; y=c; int gety() return y; ;void main() C myc(1,2,3); myc.x=10; myc.display();分析:類A、B中有同名公有數(shù)據(jù)成員x和同名成員函數(shù)display(),在主函數(shù)中訪問(wèn)對(duì)象myc的數(shù)據(jù)成員x是無(wú)法確定是訪問(wèn)從A中繼承的還是從B中繼承的x;調(diào)用成員函數(shù)也是如此,無(wú)法確認(rèn)是調(diào)用類A中的還是類B中的,產(chǎn)生二義性。改正方法,可以用作用域區(qū)分符
24、加以限定,如改成myc.A:x=10; myc.A:display();或myc.B:x=10; myc.B:display(); 例題14:看程序?qū)懡Y(jié)果#include <iostream.h>class Base int i; public: Base(int n)cout <<"Constucting base class" << endl;i=n; &
25、#160; Base()cout <<"Destructing base class" << endl; void showi()cout << i<< "," int Geti()return i; class Derived:public Base
26、160; int j; Base aa; public: Derived(int n,int m,int p):Base(m),aa(p) cout << "Constructing derived class" <<endl; &
27、#160; j=n; Derived()cout <<"Destructing derived class"<<endl; void show()Base:showi(); cout << j<&l
28、t;"," << aa.Geti() << endl; void main() Derived obj(8,13,24); obj.show(); 說(shuō)明:派生類的構(gòu)造函數(shù)的執(zhí)行次序,先調(diào)用基類的構(gòu)造函數(shù),再調(diào)用派生類中子對(duì)象類的構(gòu)造函數(shù),最后調(diào)用派生類的構(gòu)造函數(shù)。析構(gòu)函數(shù)的執(zhí)行次序與構(gòu)造函數(shù)正好相反,先調(diào)用派生類的析構(gòu)函數(shù),再調(diào)用派生類中子對(duì)象類的析構(gòu)函數(shù),最后調(diào)用基類的析構(gòu)函數(shù)。運(yùn)行結(jié)果:Constucting base classConstucting base classCons
29、tructing derived class13,8,24Destructing derived classDestructing base classDestructing base class 93 教材習(xí)題分析與解答1選擇題(1)C+中的類有兩種用法:一種是類的實(shí)例化,即生成類對(duì)象,并參與系統(tǒng)的運(yùn)行;另一種是通過(guò)()派生了新的類。 A.復(fù)用 B.繼承
30、0; C.封裝 D.引用答案:B(2)繼承具有( ),即當(dāng)基類本身也是某一個(gè)類派生類時(shí),底層的派生類也會(huì)自動(dòng)繼承間接基類的成員。 A)規(guī)律性 B.傳遞性 C.重復(fù)性 D.多樣性答案:
31、B(3)下列對(duì)基類和派生類關(guān)系的描述中,錯(cuò)誤的是( )。A.派生類是基類的具體化 B.派生類是基類的子集C.派生類是基類定義的延續(xù) D.派生類是基類的組合答案:B(4)下列對(duì)派生類的描述中,錯(cuò)誤的是( )。A. 一個(gè)派生類可以作為另一個(gè)派生類的基類B. 派生類至少有一個(gè)基類C. 派生類的缺省繼承方式是privateD.
32、60; 派生類只含有基類的公有成員和保護(hù)成員答案:D(5)下列對(duì)繼承的描述中,錯(cuò)誤的是( )。A. 析構(gòu)函數(shù)不能被繼承B. 派生類也是基類的組合C. 派生類的成員除了它自己的成員外,還包含了它的基類的成員D. 派生類中繼承的基類成員的訪問(wèn)權(quán)限到派生類保持不變答案:D(6)派生類的對(duì)象對(duì)它的基類成員中( )是可以訪問(wèn)的。
33、60; A.公有繼承的公有成員 B.公有繼承的私有成員 C.公有繼承的保護(hù)成員 D.私有繼承的公有成員答案:A(7)下列說(shuō)法錯(cuò)誤的是( )。A.
34、;公有繼承的基類中的public成員在派生類中仍是public的B. 公有繼承的基類中的private成員在派生類中仍是private的C. 私有繼承的基類中的public成員在派生類中變成private的D. 保護(hù)繼承的基類中的public成員在派生類中變成protected的答案:B (8)下面敘述錯(cuò)誤
35、的是( A )。A. 基類的protected成員在派生類中仍然是protectedB. 基類的protected成員在public派生類中仍然是protected的C. 基類的protected成員在private派生類中是private的D. &
36、#160; D. 基類的protected成員不能被派生類的對(duì)象訪問(wèn)答案:A(9)C+類體系中,不能被派生類繼承的有( )。A.構(gòu)造函數(shù) B.虛函數(shù) C.靜態(tài)成員函數(shù) D.賦值操作函數(shù)答案:A(10)設(shè)置虛函數(shù)的聲明中,正確的是( )。A.簡(jiǎn)化程序 B.消除二義性 C.提高運(yùn)行效
37、率 D.減少目標(biāo)代碼答案:B(11)下列虛基類的聲明中,正確的是( D )。A.class virtual B:public A B.virtual class B:public AC.class B:public A virtual D.class B: virtual public A答案:D(12)在下面的表達(dá)式中,不表示虛繼承的是( )。A.virtual public B.publ
38、ic virtual C.public D. virtual答案:C2. 比較類的三種繼承方式public(公有繼承)、protected(保護(hù)繼承)、private(私有繼承)之間的差別。答:繼承方式?jīng)Q定了基類中的成員在派生類中的屬性。三種繼承方式的共同點(diǎn):基類的private成員在派生類中不可見。區(qū)別:對(duì)于私有繼承,基類的public,protected成員在派生類中作為private成員;對(duì)于公有繼承,基類的public,protected成員在派生類中訪問(wèn)屬性不變;對(duì)于保護(hù)繼承,基類的public,prote
39、cted成員在派生類中作為protected成員。3. 派生類構(gòu)造函數(shù)執(zhí)行的次序是怎樣的?答:派生類構(gòu)造函數(shù)的執(zhí)行順序是先執(zhí)行所有基類的構(gòu)造函數(shù)(順序按照定義派生類是指定的各基類順序),再執(zhí)行對(duì)象成員所在類的構(gòu)造函數(shù)(順序按照他們?cè)陬愔械穆暶黜樞颍?,最后?zhí)行派生類構(gòu)造函數(shù)體中的內(nèi)容。4. 如果在派生類B已經(jīng)重載了基類A的一個(gè)成員函數(shù)fn1(),沒有重載成員函數(shù)fn2(),如何調(diào)用基類的成員函數(shù)fn1(),fn2()?答:因?yàn)樵谂缮怋已經(jīng)重載了基類A的一個(gè)成員函數(shù)fn1(),所以要用作用域運(yùn)算符對(duì)fn1()函數(shù)加以限定,調(diào)用基類的成員函數(shù)fn1()是A:fn1();因?yàn)樵谂缮怋沒有重載成員函
40、數(shù)fn2(),所以直接可調(diào)用fn2()。5. 什么叫做虛基類?它有何作用?答:在多重繼承中,如果多條繼承路徑上有一個(gè)公共的基類,則在這些路徑的匯合點(diǎn)上的派生類會(huì)產(chǎn)生來(lái)自不同路徑的公共基類的多個(gè)拷貝,如果用virtual把公共基類定義成虛基類,則只會(huì)保留公共基類的一個(gè)拷貝。引進(jìn)虛基類的目的是為了解決二義性問(wèn)題,使得公共基類在它的派生類對(duì)象中只產(chǎn)生一個(gè)基類子對(duì)象。6. 聲明一個(gè)Shape基類,在此基礎(chǔ)上派生出Rectangle和Circle類,二者都有GetArea()函數(shù)計(jì)算對(duì)象的面積。使用Rectangle類創(chuàng)建一個(gè)派生類Square。#include<iostream.h>#de
41、fine PI 3.1415926class shapeprotected: double s;public: void show() cout<<"s= "<<s<<endl; class Rectangle:public shape double x,y;
42、60;public: Rectangle(double x1=0,double y1=0) x=x1;y=y1; void GetArea() s=x*y; class Circl
43、e:public shape double r; public: Circle(double r1=0) r=r1; void GetArea(
44、) s=r*r*PI; class Square :public Rectangle double a; public: Square(double a1=0 ) a=a1;
45、60; void GetArea() s=a*a; 8定義一個(gè)基類有姓名、性別、年齡,再由基類派生出教師類和學(xué)生類,教師類增加工號(hào)、職稱和工資,學(xué)生類增加學(xué)號(hào)、班級(jí)、專業(yè)和入學(xué)成績(jī)。#include<iostream.h>#include<string.h>#include<iomanip.h>class base &
46、#160; /定義一個(gè)基類protected: char name20; /姓名 char sex3; /性別 int age;
47、60; /年齡 class teacher:public base /基類派生出教師類 int sno; /工號(hào) char zc20; /職稱 do
48、uble wages; /工資 class student :public base /基類派生出學(xué)生類 int sno; /學(xué)號(hào) char bj10; /班級(jí)
49、;char zy10; /專業(yè) double score; /入學(xué)成績(jī) 94 補(bǔ)充習(xí)題選擇題(2) 設(shè)有如下程序:#include<iostream.h>class A public: int i;
50、;display() cout<<”class An”; ;class Bpublic: int i; display() cout<<”class Bn”; ;class C: public: A,public B int j;public: int i; show()j=i*i; display();void main()C demo; demo.show();主程序運(yùn)行時(shí)將( )A. 因變量i的重復(fù)定義而報(bào)錯(cuò)B. 因?qū)ο骴emo間接調(diào)用display函數(shù)時(shí)產(chǎn)生歧義性而報(bào)錯(cuò)C. 因類定義的語(yǔ)法錯(cuò)而不能運(yùn)行D.
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)家庭影院音響系統(tǒng)行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 設(shè)計(jì)單位資質(zhì)管理制度
- 證書印章專人管理制度
- 試制加工車間管理制度
- 試驗(yàn)檢測(cè)車間管理制度
- 財(cái)務(wù)資料調(diào)閱管理制度
- 賬戶中心權(quán)限管理制度
- 貨款支付預(yù)算管理制度
- 貨車出廠檢查管理制度
- 2025年中國(guó)光子脫毛機(jī)器行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 光伏發(fā)電項(xiàng)目施工組織設(shè)計(jì)
- 小品劇本最后一堂課
- 現(xiàn)場(chǎng)急救知到章節(jié)答案智慧樹2023年福建警察學(xué)院
- 電子汽車衡作業(yè)指導(dǎo)書
- 電纜電纜采購(gòu)合同范本(匯編6篇)
- 繼電保護(hù)裝置整定記錄
- 2022年北京市朝陽(yáng)區(qū)幼兒園教師招聘筆試《幼兒保教知識(shí)與能力》試題及答案解析
- 計(jì)劃保養(yǎng)手冊(cè)-mrc卡設(shè)備ManitowocQ和型號(hào)所有制冰機(jī)
- 上海高一數(shù)學(xué)教材電子版
- 數(shù)字通信系統(tǒng)課件
- 最新教師培訓(xùn)課件:教師專業(yè)發(fā)展
評(píng)論
0/150
提交評(píng)論