版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1 概念填空題1.1 C+支持兩種多態(tài)性,分別是 編譯時(shí) 和 運(yùn)行時(shí) 。1.2在編譯時(shí)就確定的函數(shù)調(diào)用稱為 靜態(tài)聯(lián)編 ,它通過使用 函數(shù)重載,模板等 實(shí)現(xiàn)。1.3在運(yùn)行時(shí)才確定的函數(shù)調(diào)用稱為 動態(tài)聯(lián)編 ,它通過 虛函數(shù) 來實(shí)現(xiàn)。1.4虛函數(shù)的聲明方法是在函數(shù)原型前加上關(guān)鍵字 virtual 。在基類中含有虛函數(shù),在派生類中的函數(shù)沒有顯式寫出virtual關(guān)鍵字,系統(tǒng)依據(jù)以下規(guī)則判斷派生類的這個(gè)函數(shù)是否是虛函數(shù):該函數(shù)是否和基類的虛函數(shù) 同名 ;是否與基類的虛函數(shù) 參數(shù)個(gè)數(shù)相同、類型 ;是否與基類的虛函數(shù) 相同返回類型 。如果滿足上述3個(gè)條件,派生類的函數(shù)就是 虛函數(shù)。并且該函數(shù) 覆蓋 基類的虛
2、函數(shù)。1.5當(dāng)通過 引用 或 指針 使用虛函數(shù)時(shí),C+會在與對象關(guān)聯(lián)的派生類中正確的選擇重定義的函數(shù)。實(shí)現(xiàn)了 運(yùn)行時(shí) 時(shí)多態(tài)。而通過 對象 使用虛函數(shù)時(shí),不能實(shí)現(xiàn)運(yùn)行時(shí)時(shí)多態(tài)。1.6 純虛函數(shù)是一種特別的虛函數(shù),它沒有函數(shù)的 函數(shù)體 部分,也沒有為函數(shù)的功能提供實(shí)現(xiàn)的代碼,它的實(shí)現(xiàn)版本必須由 派生類 給出,因此純虛函數(shù)不能是 友元函數(shù) 。擁有純虛函數(shù)的類就是 抽象類 類,這種類不能 實(shí)例化 。如果純虛函數(shù)沒有被重載,則派生類將繼承此純虛函數(shù),即該派生類也是 抽象 。1.7 類的構(gòu)造函數(shù) 不可以 (可以/不可以)是虛函數(shù),類的析構(gòu)函數(shù)可以 (可以/不可以)是虛函數(shù)。當(dāng)類中存在動態(tài)內(nèi)存分配時(shí)經(jīng)常將
3、類的 析構(gòu)函數(shù) 函數(shù)聲明成 虛函數(shù) 。2簡答題2.1在C+中,能否聲明虛構(gòu)造函數(shù)?為什么?能否聲明虛析構(gòu)函數(shù)?為什么?2.2 什么是抽象類?抽象類有何作用?可以聲明抽象類的對象嗎?為什么?2.3多態(tài)性和虛函數(shù)有何作用?2.4是否使用了虛函數(shù)就能實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性?怎樣才能實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài)性?2.5為什么析構(gòu)函數(shù)總是要求說明為虛函數(shù)?3選擇題3.1在C+中,要實(shí)現(xiàn)動態(tài)聯(lián)編,必須使用(D)調(diào)用虛函數(shù)。A.類名 B.派生類指針 C.對象名 D.基類指針3.2下列函數(shù)中,不能說明為虛函數(shù)的是(C)。A.私有成員函數(shù) B.公有成員函數(shù) C.構(gòu)造函數(shù) D.析構(gòu)函數(shù)3.3在派生類中,重載一個(gè)虛函數(shù)時(shí),要求函
4、數(shù)名、參數(shù)的個(gè)數(shù)、參數(shù)的類型、參數(shù)的順序和函數(shù)的返回值(A)。 A.相同 B.不同 C.相容 D.部分相同3.4當(dāng)一個(gè)類的某個(gè)函數(shù)被說明為virtual時(shí),該函數(shù)在該類的所有派生類中(A)。 A都是虛函數(shù) B只有被重新說明時(shí)才是虛函數(shù) C只有被重新說明為virtual時(shí)才是虛函數(shù) D都不是虛函數(shù)3.5( C)是一個(gè)在基類中說明的虛函數(shù),它在該基類中沒有定義,但要求任何派生類都必須定義自己的版本。 A虛析構(gòu)函數(shù)B虛構(gòu)造函數(shù) C純虛函數(shù)D靜態(tài)成員函數(shù)3.6 以下基類中的成員函數(shù),哪個(gè)表示純虛函數(shù)(C)。 Avirtual void vf(int);Bvoid vf(int)=0; Cvirtual
5、 void vf( )=0;Dvirtual void vf(int) 3.7下列描述中,(D)是抽象類的特性。 A可以說明虛函數(shù) B可以進(jìn)行構(gòu)造函數(shù)重載 C可以定義友元函數(shù) D不能定義其對象3.8類B是類A的公有派生類,類A和類B中都定義了虛函數(shù)func( ),p是一個(gè)指向類A對象的指針,則p-A:func( )將(A)。 A調(diào)用類A中的函數(shù)func( ) B調(diào)用類B中的函數(shù)func( ) C根據(jù)p所指的對象類型而確定調(diào)用類A中或類B中的函數(shù)func( ) D既調(diào)用類A中函數(shù),也調(diào)用類B中的函數(shù)3.9類定義如下。class Apublic:virtual void func1( ) void
6、 fun2( ) ;class B:public Apublic:void func1( ) cout”class B func1”endl;virtual void func2( ) cout”class B func2”endl;則下面正確的敘述是(A) AA:func2( )和B:func1( )都是虛函數(shù) BA:func2( )和B:func1( )都不是虛函數(shù) CB:func1( )是虛函數(shù),而A:func2( )不是虛函數(shù) DB:func1( )不是虛函數(shù),而A:func2( )是虛函數(shù)3.10下列關(guān)于虛函數(shù)的說明中,正確的是( B)。 A從虛基類繼承的函數(shù)都是虛函數(shù) B虛函數(shù)不得
7、是靜態(tài)成員函數(shù) C只能通過指針或引用調(diào)用虛函數(shù) D抽象類中的成員函數(shù)都是虛函數(shù)4寫出下列程序運(yùn)行結(jié)果4.1#includeusing namespace std;class A public:virtual void func( ) cout”func in class A”endl;class Bpublic:virtual void func( ) cout”func in class B”endl;class C:public A,public Bpublic:void func( ) cout”func in class C”endl:;int main( )C c;A& pa=c;B
8、& pb=c;C& pc=c;pa.func( ); pb.func( );pc.func( );func in class C func in class C func in class C4.2#includeusing namespace std;class Apublic:virtual A( )cout”A:A( ) called “endl; ;class B:public Achar *buf;public:B(int i) buf=new chari; virtual B( )delete buf;cout”B:B( ) called”endl;void fun(A *a) d
9、elete a;int main( )A *a=new B(10);fun(a);B:B( ) calledA:A( ) called5.程序設(shè)計(jì)題5.1有一個(gè)交通工具類vehicle,將它作為基類派生小車類car、卡車類truck和輪船類boat,定義這些類并定義一個(gè)虛函數(shù)用來顯示各類信息。#include#includeusing namespace std;class Vehiclepublic:virtual void showinfo()=0;protected: char Name20;class Car:public Vehiclepublic:Car(char *name)st
10、rcpy(Name,name);void showinfo()coutNameendl;protected:int Radius;class Truck:public Vehiclepublic:Truck(char *name)strcpy(Name,name);void showinfo()coutNameendl;class Boat:public Vehiclepublic:Boat(char *name)strcpy(Name,name);void showinfo()coutNameshowinfo ();vp=&truck;vp-showinfo ();vp=&boat;vp-s
11、howinfo ();return 0;5.2定義一個(gè)shape抽象類,派生出Rectangle類和Circle類,計(jì)算各派生類對象的面積Area( )。#include#includeusing namespace std;class Shapepublic:virtual void Area()=0;class Rectangle:public Shapepublic:Rectangle(double w,double h)width=w,height=h;void Area()coutwidth*heightendl;protected:double width,height;class
12、 Circle:public Shapepublic:Circle(double r)radius=r;void Area()cout3.1415*radius*radiusArea ();sp=&cir1;sp-Area ();return 0;5.3定義貓科動物Animal類,由其派生出貓類(Cat)和豹類(Leopard),二者都包含虛函數(shù) sound( ),要求根據(jù)派生類對象的不同調(diào)用各自重載后的成員函數(shù)。#include#includeusing namespace std;class Animalpublic:virtual void Speak()=0;class Cat :pu
13、blic Animalvoid Speak()coutMy name is Catendl;class Leopard:public Animalvoid Speak()coutMy name is LeopardSpeak();Leopard leopard;pa=&leopard;pa-Speak();return 0;5.4矩形法(rectangle)積分近似計(jì)算公式為: x(y0+y1+.yn-1) 梯形法(1adder)積分近似計(jì)算公式為: y0+2(y1+.yn-1)+yn 辛普生法(simpson)積分近似計(jì)算公式(n為偶數(shù))為:y0+ yn +4(y1+y3.yn-1)+2(y
14、2+y4+yn-2)被積函數(shù)用派生類引入,定義為純虛函數(shù)。基類(integer)成員數(shù)據(jù)包括積分上下限b和a,分區(qū)數(shù)n,步長step=(b-a)n,積分值result。定義積分函數(shù)integerate()為虛函數(shù),它只顯示提示信息。派生的矩形法類(rectangle)重定義integerate(),采用矩形法做積分運(yùn)算。 派生的梯形法類(1adder)和辛普生法(simpson)類似。試編程,用3種方法對下列被積函數(shù)進(jìn)行定積分計(jì)算,并比較積分精度。 (1)sin(x),下限為0.0,上限為pir/2。 (2)exp(x),下限為0.0,上限為1.0。 (3)4.0/(1+xx),下限為0.0,
15、上限為1.0。解法一#include#includeusing namespace std;class Integerprotected:double result,a,b,step;/Intevalue積分值,a積分下限,b積分上限int n;public:virtual double fun(double x)=0;/被積函數(shù)聲明為純虛函數(shù)virtual void Integerate()cout這里是積分函數(shù)endl;Integer(double ra=0,double rb=0,int nn=2000)a=ra;b=rb;n=nn;result=0;void Print()cout.p
16、recision(15);cout積分值=resultendl;class Rectangle:public Integerpublic:void Integerate()int i;step=(b-a)/n;for(i=0;i=n;i+) result+=fun(a+step*i);result*=step;Rectangle(double ra,double rb,int nn):Integer(ra,rb,nn);class Ladder:public Integerpublic:void Integerate()int i;step=(b-a)/n;result=fun(a)+fun(
17、b);for(i=1;in;i+) result+=2*fun(a+step*i);result*=step/2;Ladder(double ra,double rb,int nn):Integer(ra,rb,nn);class Simpson:public Integerpublic:void Integerate()int i;step=(b-a)/n;result=fun(a)+fun(b);for(i=1;in;i+=2) result+=4*fun(a+step*i);for(i=2;iIntegerate();/動態(tài),可以訪問派生類定義的被積函數(shù)bp-Print();sinL s
18、l(0.0,3./2.0,100);bp=&sl;bp-Integerate();/動態(tài),可以訪問派生類定義的被積函數(shù)bp-Print();sinS ss(0.0,3./2.0,100);bp=&ss;bp-Integerate();/動態(tài),在層次中選bp-Print();expR er(0.0,1.0,100);bp=&er;bp-Integerate();/動態(tài),可以訪問派生類定義的被積函數(shù)bp-Print();expL el(0.0,1.0,100);bp=⪙bp-Integerate();/動態(tài),可以訪問派生類定義的被積函數(shù)bp-Print();expS es(0.0,1.0,1
19、00);bp=&es;bp-Integerate();/動態(tài),在層次中選bp-Print();otherR or(0.0,1.0,100);bp=∨bp-Integerate();/動態(tài),可以訪問派生類定義的被積函數(shù)bp-Print();otherL ol(0.0,1.0,100);/增加到也達(dá)不到辛普生法的精度bp=&ol;bp-Integerate();/動態(tài),可以訪問派生類定義的被積函數(shù)bp-Print();otherS os(0.0,1.0,100);bp=&os;bp-Integerate();/動態(tài),在層次中選bp-Print();return 0;解法二/Integer為抽
20、象類,fun為被積函數(shù),其余3個(gè)虛函數(shù)為積分函數(shù)#include#includeusing namespace std;class Integerprotected:double result,a,b,step;/Intevalue積分值,a積分下限,b積分上限int n;public:virtual double fun(double x)=0;/被積函數(shù)聲明為純虛函數(shù)virtual void Rectangle()=0;virtual void Ladder()=0;virtual void Simpson()=0;Integer(double ra=0,double rb=0,int n
21、n=2000)a=ra;b=rb;n=nn;step=(b-a)/n;result=0;void Print()cout.precision(15);cout積分值=resultendl;class SIN:public Integerpublic:SIN(double ra,double rb,int nn):Integer(ra,rb,nn)double fun(double x)return sin(x);void Rectangle()int i;for(i=0;i=n;i+) result+=fun(a+step*i);result*=step;void Ladder()int i;
22、result=fun(a)+fun(b);for(i=1;in;i+) result+=2*fun(a+step*i);result*=step/2;void Simpson()int i;result=fun(a)+fun(b);for(i=1;in;i+=2) result+=4*fun(a+step*i);for(i=2;iRectangle();Inp-Print();Inp-Ladder();Inp-Print();Inp-Simpson();Inp-Print();return 0;解法三/Integer為抽象類,fun為被積函數(shù),其余3個(gè)虛函數(shù)為積分函數(shù)#include#incl
23、udeusing namespace std;class Fun/被積函數(shù),抽象類public:virtual double fun(double x)=0;/被積函數(shù)聲明為純虛函數(shù);class Integer/積分函數(shù),抽象類protected:double result,a,b,step;/Intevalue積分值,a積分下限,b積分上限int n;public:virtual void Integrate()=0;Integer(double ra=0,double rb=0,int nn=2000)a=ra;b=rb;n=nn;step=(b-a)/n;result=0;void Print()cout.precision(15);cout積分值=resultendl;class SIN_Rect:public Integer,public Fun/求sin積分,采用矩形積分法public:SIN_Rect(double ra,double rb,int nn):Integer(ra,rb,nn)double fun(double x)return sin(x);void Integrate()int i;for(i=0;i=n;i+) result+=fun(a+step*i);result*=step;class
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 正面戰(zhàn)場的抗戰(zhàn) 說課課件 2024-2025學(xué)年統(tǒng)編版八年級歷史上冊
- 企業(yè)代理產(chǎn)品合同范例
- 建筑企業(yè)噴漆合同范例
- 廣告制作行業(yè)合同范例
- 工廠招學(xué)徒合同范例
- 商鋪防水專業(yè)合同范例
- 德云社師徒協(xié)議合同范例
- 小區(qū)綠化預(yù)算合同范例
- 座談會演講稿格式
- 庫存鞋購銷合同范例
- 江蘇非物質(zhì)文化遺產(chǎn)
- 植物檢疫知識習(xí)題庫(含參考答案)
- 崔允漷《有效教學(xué)》心得體會課件
- 病案編碼員資格證理論考試145題(附答案)
- 黃色卡通風(fēng)名著導(dǎo)讀稻草人PPT模板
- 鋁單板施工勞務(wù)合同
- 辦公室工作分工安排表
- 2023年副主任醫(yī)師(副高)-耳鼻咽喉科學(xué)(副高)歷年考試真題(易錯(cuò)與難點(diǎn)匯編)帶答案
- 21秋國家開放大學(xué)《公共部門人力資源管理》單元自測題參考答案
- 中藥的外治膏藥
- 小學(xué)數(shù)學(xué)專題講座(課堂PPT)
評論
0/150
提交評論