版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上習(xí)題9及其解答9.1 選擇題1在C+中,要實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,必須使用( d )調(diào)用虛函數(shù)。(a) 類名(b) 派生類指針(c) 對(duì)象名(d) 基類指針2下列函數(shù)中,不能說(shuō)明為虛函數(shù)的是( c )。(a) 私有成員函數(shù)(b) 公有成員函數(shù)(c) 構(gòu)造函數(shù)(d) 析構(gòu)函數(shù)3在派生類中,重載一個(gè)虛函數(shù)時(shí),要求函數(shù)名、參數(shù)的個(gè)數(shù)、參數(shù)的類型、參數(shù)的順序和函數(shù)的返回值( a )。(a) 相同(b)不同(c) 相容(d) 部分相同4C+中,根據(jù)( d )識(shí)別類層次中不同類定義的虛函數(shù)版本。(a) 參數(shù)個(gè)數(shù)(b) 參數(shù)類型(c) 函數(shù)名(d) this指針類型5虛析構(gòu)函數(shù)的作用是( c
2、 )。(a) 虛基類必須定義虛析構(gòu)函數(shù)(b) 類對(duì)象作用域結(jié)束時(shí)釋放資源(c)delete動(dòng)態(tài)對(duì)象時(shí)釋放資源(d) 無(wú)意義6下面函數(shù)原型中,( b )聲明了fun為純虛函數(shù)。(a) void fun()=0; (b) virtual void fun()=0;(c) virtual void fun(); (d) virtual void fun() ;7若一個(gè)類中含有純虛函數(shù),則該類稱為( c )。(a) 基類(b)純基類(c) 抽象類(d) 派生類 8假設(shè) Aclass為抽象類,下列正確的說(shuō)明語(yǔ)句是( b )。(a) Aclass fun( int ) ; (b) Aclass * p ;
3、(c) int fun( Aclass ) ; (d) Aclass Obj ;9下面描述中,正確的是( d )。(a) 虛函數(shù)是沒(méi)有實(shí)現(xiàn)的函數(shù)(b) 純虛函數(shù)是返回值等于0的函數(shù)(c) 抽象類是只有純虛函數(shù)的類(d) 抽象類指針可以指向不同的派生類10構(gòu)造異質(zhì)鏈表的意義是( d )。(a) 用數(shù)組組織類對(duì)象(b) 用鏈表組織類對(duì)象(c) 用抽象類指針指向派生類對(duì)象(d) 用抽象類指針構(gòu)造派生類對(duì)象鏈表9.2 閱讀下列程序,寫出執(zhí)行結(jié)果1#include <iostream>using namespace std;class Bclass public: Bclass( int i
4、, int j ) x = i; y = j; virtual int fun() return 0 ; protected: int x, y ;class Iclass:public Bclass public : Iclass(int i, int j, int k):Bclass(i, j) z = k; int fun() return ( x + y + z ) / 3; private : int z ;int main() Iclass obj( 2, 4, 10 ); Bclass p1 = obj; cout << p1.fun() << endl;
5、 Bclass &p2 = obj ; cout << p2.fun() << endl; cout << p2.Bclass : fun() << endl; Bclass *p3 = &obj; cout << p3 -> fun() << endl;【解答】0 5 0 52#include <iostream>using namespace std;class Base public: virtual void getxy( int i,int j = 0 ) x = i; y =
6、j; virtual void fun() = 0 ; protected: int x , y; ;class A : public Base public: void fun() cout<<"x = "<<x<<'t'<<"y = x * x = "<<x*x<<endl; ;class B : public Base public: void fun() cout << "x = " << x <<
7、39;t' << "y = " << y << endl; cout << "y = x / y = " << x / y << endl; ;int main() Base * pb; A obj1; B obj2; pb = &obj1; pb -> getxy( 10 ); pb -> fun(); pb = &obj2; pb -> getxy( 100, 20 ); pb -> fun();【解答】x = 10 y = x*x
8、 = 100 x = 100 y = 20 y = x / y = 59.3思考題1在C+中,使用類體系依靠什么機(jī)制實(shí)現(xiàn)程序運(yùn)行時(shí)的多態(tài)?【解答】在C+中,基類指針可以指向派生類對(duì)象,以及基類中擁有虛函數(shù),是支持多態(tài)性的前提。程序通過(guò)用同一個(gè)基類指針訪問(wèn)不同派生類的虛函數(shù)重載版本實(shí)現(xiàn)程序運(yùn)行時(shí)的多態(tài)。C+的虛特性負(fù)責(zé)自動(dòng)地在程序運(yùn)行時(shí)把基類指針的關(guān)聯(lián)類型轉(zhuǎn)換成當(dāng)前指向?qū)ο蟮呐缮愵愋?。另外,抽象類機(jī)制提供了軟件抽象和可擴(kuò)展性的手段,實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性。2如果一個(gè)類的虛函數(shù)被聲明為私有成員函數(shù),會(huì)有語(yǔ)法錯(cuò)誤嗎?當(dāng)它作為基類時(shí),可以在應(yīng)用類體系時(shí)實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編嗎?請(qǐng)你驗(yàn)證一下。【解答】沒(méi)有語(yǔ)法錯(cuò)誤。
9、但在應(yīng)用類體系時(shí)無(wú)法實(shí)現(xiàn)動(dòng)態(tài)編聯(lián)和多態(tài)。因?yàn)樗接谐蓡T函數(shù)只在類內(nèi)可見(jiàn),在類外無(wú)法調(diào)用,無(wú)法在類外通過(guò)基類指針實(shí)現(xiàn)多態(tài)。程序略。3虛函數(shù)和純虛函數(shù)的區(qū)別是什么?【解答】虛函數(shù)定義時(shí)冠以關(guān)鍵字virtual,本身有實(shí)現(xiàn)代碼,作用是引導(dǎo)基類指針根據(jù)指向?qū)ο笳{(diào)用類體系中不同重載版本函數(shù)。純虛函數(shù)是指在說(shuō)明時(shí)代碼“為0”的虛函數(shù),即純虛函數(shù)本身并沒(méi)有實(shí)現(xiàn)代碼,必須通過(guò)它的派生類定義實(shí)現(xiàn)版本。4一個(gè)非抽象類的派生類是否可以為抽象類?利用例9-11進(jìn)行驗(yàn)證,從Hex_type類派生一個(gè)Hex_format類,其中包含一個(gè)純虛函數(shù)Show_format,然后定義Hex_format的派生類定義實(shí)現(xiàn)Show_f
10、ormat?!窘獯稹恳粋€(gè)非抽象類的派生類可以為抽象類,即在派生類中定義了純虛函數(shù)。程序略。9.4編程題1使用虛函數(shù)編寫程序求球體和圓柱體的體積及表面積。由于球體和圓柱體都可以看做由圓繼承而來(lái),所以可以把圓類Circle作為基類。在Circle類中定義一個(gè)數(shù)據(jù)成員radius和兩個(gè)虛函數(shù)area和volume。由Circle類派生Sphere類和Column類。在派生類中對(duì)虛函數(shù)area和volume重新定義,分別求球體和圓柱體的體積及表面積?!窘獯稹?include <iostream>using namespace std;const double PI=3.;class cir
11、cle public: circle(double r) radius = r; virtual double area() return 0.0; virtual double volume() return 0.0; protected: double radius;class sphere:public circle public: sphere( double r ):circle( r ) double area() return 4.0 * PI * radius * radius; double volume() return 4.0 * PI * radius * radius
12、 * radius / 3.0; ;class column:public circle public: column( double r,double h ):circle( r ) height = h; double area() return 2.0 * PI * radius * ( height + radius ); double volume() return PI * radius * radius * height;private: double height;int main() circle *p; sphere sobj(2); p = &sobj; cout
13、 << "球體:" << endl; cout << "體積 = " << p->volume() << endl; cout << "表面積 = " << p->area() << endl; column cobj( 3,5 ); p = &cobj; cout << "圓柱體:" << endl; cout << "體積 = " <&
14、lt; p->volume() << endl; cout << "表面積 = " << p->area() << endl;2某學(xué)校對(duì)教師每月工資的計(jì)算規(guī)定如下:固定工資+課時(shí)補(bǔ)貼。教授的固定工資為5000元,每個(gè)課時(shí)補(bǔ)貼50元。副教授的固定工資為3000元,每個(gè)課時(shí)補(bǔ)貼30元。講師的固定工資為2000元,每個(gè)課時(shí)補(bǔ)貼20元。定義教師抽象類,派生不同職稱的教師類,編寫程序求若干個(gè)教師的月工資。【解答】#include <iostream>using namespace std;class teache
15、r public: teacher( char tname,int time ) strcpy( name,tname ); coursetime = time; virtual int pay() = 0; virtual void print() = 0; char *getname() return name; int getcoursetime() return coursetime; protected: char name30;int coursetime; ;class professor:public teacher public: professor( char pname,
16、int time ):teacher( pname,time ) int pay() return 5000+coursetime*50; void print() cout<<"教授:"<<getname();class associateprofessor:public teacher public: associateprofessor( char pname,int time ):teacher( pname,time ) int pay() return 3000 + coursetime * 30; void print() cout &
17、lt;< "副教授:" << getname(); ; class lecturer:public teacher public: lecturer( char pname,int time ):teacher( pname,time ) int pay() return 2000 + coursetime * 20; void print() cout << "講師:" << getname(); int main() professor pobj( "李小平",32 ); pobj.pri
18、nt(); cout << 't' << "工資:" << pobj.pay() << endl; associateprofessor apobj( "王芳芳",56 ); apobj.print(); cout << 't' << "工資:" << apobj.pay() << endl; lecturer lobj( "何大建",72 ); lobj.print(); cout << 't
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)政法大學(xué)《工程中的數(shù)值方法C》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州西亞斯學(xué)院《現(xiàn)代通信原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 長(zhǎng)江工程職業(yè)技術(shù)學(xué)院《公共服務(wù)質(zhì)量管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 消費(fèi)級(jí)3D打印機(jī)打印精度改進(jìn)
- 保險(xiǎn)行業(yè)基礎(chǔ)講解模板
- 業(yè)務(wù)操作-房地產(chǎn)經(jīng)紀(jì)人《業(yè)務(wù)操作》名師預(yù)測(cè)卷4
- 開(kāi)學(xué)晨會(huì)發(fā)言稿
- 二零二五年政府形象廣告服務(wù)合同規(guī)范
- 二零二五版國(guó)際學(xué)校外教引進(jìn)與團(tuán)隊(duì)建設(shè)協(xié)議3篇
- 2024-2025學(xué)年新疆烏魯木齊四十一中高二(上)期末數(shù)學(xué)試卷(含答案)
- 《道路交通安全法》課件完整版
- 向女朋友認(rèn)錯(cuò)保證書(shū)范文
- 五分?jǐn)?shù)加法和減法(課件)-數(shù)學(xué)五年級(jí)下冊(cè)
- 2024年四川省綿陽(yáng)市中考語(yǔ)文試卷(附真題答案)
- 設(shè)計(jì)材料與工藝課程 課件 第1章 產(chǎn)品設(shè)計(jì)材料與工藝概述
- 幼兒園反恐防暴技能培訓(xùn)內(nèi)容
- 食品企業(yè)質(zhì)檢員聘用合同
- 中醫(yī)診所內(nèi)外部審計(jì)制度
- 自然辯證法學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年國(guó)家危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)考試題庫(kù)(含答案)
- 護(hù)理員技能培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論