C-譚浩強-總復習題_第1頁
C-譚浩強-總復習題_第2頁
C-譚浩強-總復習題_第3頁
C-譚浩強-總復習題_第4頁
C-譚浩強-總復習題_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

.習題四填空題1、聯(lián)編是指一個程序模塊、調(diào)用代碼之間互相關聯(lián)的過程。根據(jù)聯(lián)編的時機不同,可以分為靜態(tài)聯(lián)編和( 動態(tài)聯(lián)編 )。2、包含一個或多個純虛函數(shù)的類稱為(抽象類 )。3、虛函數(shù)應該在( 基類 )中聲明,且不能在派生類中重新定義。4、純虛函數(shù)是( 只有函數(shù)聲明而沒有具體函數(shù)功能實現(xiàn)的虛函數(shù))。5、在析構函數(shù)前面加上關鍵字( virtual)進行說明,稱該析構函數(shù)為虛析構函數(shù)。6、如果一個基類的析構函數(shù)被說明為虛析構函數(shù),則它的派生類中的(析構函數(shù) )也是虛析構函數(shù)。7、多態(tài)性分為兩類:編譯時的多態(tài)性和( 運行時的多態(tài)性 ),編譯時的多態(tài)性是通過和( 函數(shù) )模板實現(xiàn)的。8、對虛函數(shù)的調(diào)用有兩種方式:( 指針調(diào)用 )和( 對象調(diào)用 )。9、實現(xiàn)編譯時的多態(tài)性的機制稱為(靜態(tài)關聯(lián) ),實現(xiàn)運行時的多態(tài)性的機制稱為( 動態(tài)關聯(lián) )。10、有一種特殊的虛函數(shù),重定義時不要求同名,這種虛函數(shù)是(虛析構函數(shù) )。11、模板可以實現(xiàn)程序設計中的( 代碼重用 ),體現(xiàn)了面向對象程序設計的(重用性 )。12、C+模板可以分為( 函數(shù)模板 )和(類模板 )。13、由函數(shù)模板實例化后是( 模板函數(shù) ),由類模板實例化后是(模板類 )。14、模板的聲明使用關鍵字(template )。15、已知int sum(int n)return n+n;long sum(long n)return n+n;是一個函數(shù)模板的兩個實例,則該函數(shù)模板的定義是( templateT sum(T n)return n+n; )。選擇題1、下面的4個關鍵字中,( A )是用來說明虛函數(shù)的。A. virtualB. publicC. protectedD. private2、實現(xiàn)運行時的多態(tài)性要使用( D )。A. 重載函數(shù)B. 構造函數(shù)C. 析構函數(shù)D.虛函數(shù)3、如果一個類至少有一個純虛函數(shù),那么該類稱為( C )。A. 虛基類B. 派生類C. 抽象類D. 以上都不對4、下列描述中,( D )是抽象類的特征。A. 可以說明虛函數(shù)B. 可以進行構造函數(shù)重載C. 可以定義友元D. 不能說明其對象5、下列關于虛函數(shù)的描述中,( C )是正確的。A. 虛函數(shù)是一個非成員函數(shù)B. 虛函數(shù)是一個靜態(tài)成員函數(shù)C. 派生類的虛函數(shù)與基類種對應的虛函數(shù)具有相同的參數(shù)個數(shù)和類型D. 虛函數(shù)既可以在函數(shù)說明時定義,也可以在函數(shù)實現(xiàn)時定義6、下列關于純虛函數(shù)與抽象類的描述中,( C )是錯誤的。A. 抽象類是指具有純虛函數(shù)的類B. 純虛函數(shù)是一個特殊的虛函數(shù),它沒有具體的實現(xiàn)C. 一個基類中說明具有純虛函數(shù),該基類的派生類一定不再是抽象類D. 抽象類只能作為基類來用,其純虛函數(shù)的實現(xiàn)由派生類給出7、下列各函數(shù)的說明中,( B )表示純虛函數(shù)。A. virtual int vf(int);B. void vf(int)=0;C. virtual void vf()=0;D. virtual void vf(int)8、虛函數(shù)必須是類的( D )。A. 友元函數(shù)B. 構造函數(shù)C. 析構函數(shù)D. 成員函數(shù)9、下列關于虛函數(shù)的描述中,( A )是正確的。A. 虛函數(shù)不能聲明為另一個類的友元函數(shù)B. 虛函數(shù)不能聲明為靜態(tài)成員函數(shù)C. 派生類必須重新定義基類的虛函數(shù)D. 如果在重定義虛函數(shù)時使用了保留字virtual,則該重定義函數(shù)仍然是虛函數(shù)10、多態(tài)調(diào)用是指( C )。A. 以任何方式調(diào)用一個虛函數(shù)B. 以任何方式調(diào)用一個純虛函數(shù)C. 借助于指向對象的基類指針或引用調(diào)用一個虛函數(shù)D. 借助于指向對象的基類指針或引用調(diào)用一個純虛函數(shù)11、在C+中,要實現(xiàn)動態(tài)聯(lián)編,必須使用( D )調(diào)用虛函數(shù)。A. 類名B. 派生類指針C. 對象名D. 基類指針12、下列函數(shù)中,可以作為虛函數(shù)的是( D )。A. 普通函數(shù)B. 構造函數(shù)C. 友元函數(shù)D. 析構函數(shù)13、在派生類中,重載一個虛函數(shù)時,要求函數(shù)名、參數(shù)的個數(shù)、參數(shù)的類型、參數(shù)的順序和函數(shù)返回值( B )。A. 不同B. 相同C. 相容D. 部分相同14、假設Aclass為抽象類,下列聲明( B)是正確的。A. Aclass fun(int);B. Aclass *p;C. int fun(Aclass);D. Aclass Obj;15、下面描述中,正確的是( D )。A. 虛函數(shù)是沒有實現(xiàn)的函數(shù)B. 純虛函數(shù)的實現(xiàn)只能在直接派生類中定義C. 抽象類是只有純虛函數(shù)的類D. 抽象類指針可以指向不同的派生類16、當運行程序時實際上是將類模板實例化為一個具體的( D )。A. 類B. 對象C. 函數(shù)D. 模板類17、模板函數(shù)的真正代碼是在( C )時產(chǎn)生的。A. 源程序中聲明函數(shù)時B. 源程序中定義函數(shù)時C. 源程序中調(diào)用函數(shù)時D. 運行執(zhí)行函數(shù)時18、類模板的模板參數(shù)( D )。A. 只可作為數(shù)據(jù)成員的類型B. 只可作為成員的返回值類型C. 只可作為成員函數(shù)的參數(shù)類型D. 以上三者皆可19、以下關于模板的敘述中,不正確的是( C )。A. 用模板定義一個對象時不能省略參數(shù)B. 類模板只能有虛擬參數(shù)類型C. 類模板的成員函數(shù)都是模板函數(shù)D. 類模板本身在編譯中不會生成任何代碼20、如果有如下函數(shù)模板的定義:template T func(T x,T y)return x+y;則對函數(shù)func調(diào)用不正確的是( C )。A. func(3,5);B. func(3,5);C. func(3,2.5);D. func(3,2.5);判斷題1、在C+中,要實現(xiàn)動態(tài)聯(lián)編,可以使用基類指針調(diào)用虛函數(shù)。2、構造函數(shù)可以作為虛函數(shù)使用。N3、虛函數(shù)是沒有實現(xiàn)的函數(shù)。N4、在派生類中,重載一個虛函數(shù)時,要求函數(shù)名、參數(shù)的個數(shù)、參數(shù)的類型、參數(shù)的順序和函數(shù)返回值部分相同。N5、抽象類是只有純虛函數(shù)的類。N6、構造函數(shù)可以作為虛函數(shù)。N7、純虛函數(shù)是一個特殊的虛函數(shù),它沒有具體的實現(xiàn)。8、虛函數(shù)的聲明需要使用關鍵字protected。N9、設置虛函數(shù)的目的是為了消除二義性。N10、抽象類只能作為基類使用,其純虛函數(shù)的實現(xiàn)由派生類來完成。分析題1、#includeclass Apublic:A()coutendl實例化類A的一個對象。;virtual A()coutendl消除類A的一個對象。;virtual void f()coutendl執(zhí)行類A的成員函數(shù)。;class B:public Apublic:B()coutendl實例化類B的一個對象。;virtual B()coutendl消除類B的一個對象。;void f()coutendl執(zhí)行類B的成員函數(shù)。;void main()A a=A();B b=B();coutendl-;a.f();b.f();coutendlf();coutendl-;2、#includeclass shapepublic:shape();virtual shape()coutExecting shape dtorendl;class Circle:public shapepublic:Circle();Circle()coutExecting Circle dtorendl;void main()shape *pShape=new Circle;delete pShape;3、#include using namespace std;class Baseprivate:int x;public:Base(int a=0) x=a; virtual void fun() coutBase funendl; virtual Base() coutBaseendl; ;class Derived:public Baseprivate:int y;public:Derived(int a=0,int b=0):Base(a) y=b; void fun() coutDerived funendl; Derived() coutDerivedfun(); int main()Derived *p=new Derived;GFun(p);delete p;return 0;4、#includeclass Basepublic:virtual int func()return 10;class Derived:public Basepublic:int func()return 80;void main()Derived d;Base&b=d;coutb.func()endl;coutb.Base:func()endl;5、#includeclass basepublic:virtual void who()coutbase class1endl;class derive1:public basepublic:void who()coutderive1 class2endl;class derive2:public basepublic:void who()coutderive2 class3who();p=&obj2;p-who();p=&obj3;p-who();obj2.who();obj3.who();6、#include#includeusing namespace std;class Base char base_name20;public: Base()strcpy(base_name,BASE); virtual char*my_name()return base_name; char*class_name()return base_name;class Derived:public Basechar derived_name20;public: Derived()strcpy(derived_name,DERIVED); char*my_name()return derived_name; char*class_name()return derived_name;void show_ptr(Base*p)coutendlmy_name()class_name();void show_ref(Base&r)coutendlr.my_name()r.class_name();int main() Base bb; Derived dd; coutendl; show_ptr(&bb);cout=應顯示ABCD EFG; show_ptr(&dd);cout=應顯示DERIVED EFG; coutendl; show_ref(bb);cout=應顯示ABCD EFG; show_ref(dd);cout=應顯示DERIVED EFG;coutendl; coutendldd.Base:my_name()dd.Base:class_name(); cout=應顯示ABCD EFG; return 0;7、#include#includeconst double PI=3.14;class Circleprotected:double r; public:Circle(double radius=0):r(radius)virtual double Area()=0 ; virtual double Volume()=0; ;class Sphere:public Circle public:Sphere(double radius=0):Circle(radius)double Area()return 4*PI*r*r;double Volume()return 4*PI*pow(r,3)/3;class Cylinder:public Circle double h;public:Cylinder(double radius=0,double height=0):Circle(radius)h=height;double Area()return 2*PI*r*(r+h);double Volume()return PI*r*r*h;class Cone:public Circle double h;public:Cone(double radius=0,double height=0):Circle(radius)h=height;double Area()double l=sqrt(h*h+r*r); return PI*r*r*(r+l);double Volume()return PI*r*r*h/3;void Output(Circle*b,int n)for(int i=0;in;i+)coutArea() Volume()endl;void main()Sphere r1(2);Cylinder r2(2,3);Cone r3(2,3);Circle*a3=&r1,&r2,&r3;Output(a,3);8、#includetemplate T min(T x,T y)if (xy)return x;elsereturn y;void main()int n1=2,n2=8;double d1=2.3,d2=5.6;coutmin(n1,n2) ;coutmin(d1,d2) endl;9、#includetemplate T total(T *p)T sum=0;while(*p)sum+=*p+; return sum;int main()int x=1,3,5,7,9,0,13,15,17;couttotal(x);return 0;一、 編程題1、生成容器類RQ,提供成員函數(shù)calTJ()計算容器的體積,定義calTJ()為純虛數(shù),生成LFT類表示立方體,數(shù)據(jù)成員A表示立方體的邊長,提供成員函數(shù)calTJ()計算立方體的體積;生成長方體類CFT,數(shù)據(jù)成員A,B,C分別表示長方體的長,寬和高,提供成員函數(shù)calTJ()計算長方體的體積,類CFT和類LFT都繼承類RQ。2、在一個公司里,主管和員工的月工資計算方法規(guī)定如下:主管的每月工資固定為4200元;員工的每月工資與加班的時間有關,計算方法是每加班一小時50元,固定工資為2500元。編程實現(xiàn)每個人的月工資。要求利用純虛函數(shù)實現(xiàn)。3、編程計算圓形(Circle)和正方形(Square)的周長和面積。要求定義一個抽象類,其中包括求周長(per)和面積(area)的純虛函數(shù),然后在此基類的基礎上,派生出圓形類和正方形類,主函數(shù)通過基類的指針調(diào)用各派生類的函數(shù)。4、用函數(shù)模板實現(xiàn)求兩個整數(shù)、兩個浮點數(shù)和兩個字符中的最小值。5、定義一個類模板input,在調(diào)用構造函數(shù)時,完成的工作包括:提示用戶輸入;讓用戶輸入數(shù)據(jù);如果用戶輸出數(shù)據(jù)不在預定范圍內(nèi),提示重新輸入。習題答案一、 填空題1、動態(tài)聯(lián)編2、抽象類3、基類4、只有函數(shù)聲明而沒有具體函數(shù)功能實現(xiàn)的虛函數(shù)。5、virtual6、析構函數(shù)7、運行時的多態(tài)性 ,函數(shù)8、指針調(diào)用 ,對象調(diào)用9、靜態(tài)聯(lián)編 ,動態(tài)聯(lián)編10、虛析構函數(shù)11、代碼重用 ,可重用性12、函數(shù)模板 ,類模板13、模板函數(shù),模板類14、template15、template T sum(T n)return n+n;二、 選擇題1、A2、D 3、C 4、D 5、C 6、C 7、C 8、D 9、A 10、C 11、D12、D13、B14、B15、D16、D17、C18、D19、C20、C三、 判斷題1、2、3、4、5、6、7、8、9、10、四、 分析題1、實例化類A的一個對象。實例化類A的一個對象。實例化類B的一個對象。-執(zhí)行類A的成員函數(shù)。執(zhí)行類B的成員函數(shù)。-執(zhí)行類B的成員函數(shù)。-消除類B的一個對象。消除類A的一個對象。消除類A的一個對象。2、Execting Circle dtorExecting shape dtor3、Derived funDerivedBase4、80105、base class1derive1 class2derive2 class3derive1 class2derive2 class36、BASEBASE=應顯示ABCD EFGDERIVEDBASE=應顯示DERIVED EFGBASEBASE=應顯示ABCD EFGDERIVEDBASE=應顯示DERIVED EFGBASEBASE=應顯示ABCD EFG7、50.24 33.493362.8 37.6870.4057 12.568、2 2.39、25五、編程題1、#includeclass RQpublic:virtual float calTJ()=0;virtual void display()=0;class LFT:public RQprivate: float A;public:LFT(float a)A=a; float calTJ()return A*A*A;void display()cout立方體體積為calTJ()endl;class CFT:public RQprivate: float A,B,C;public:CFT(float a,float b,float c)A=a;B=b;C=c;float calTJ()return A*B*C;void display()cout長方體體積為calTJ()display();p=&C1;p-display();2、#includeclass Employeepublic: virtual double earn()=0;virtual void print()=0;class Manager:public Employeeprivate:double msalary;public:Manager(double ms)msalary=ms;double earn()return msalary;void print()cout主管月工資為:earn()endl;class Hworker:public Employeeprivate:double wage;int hours;public:Hworker(double w,int h)wage=w;hours=h;double earn()return 2500+hours*50;void print()cout員工加班hours小時工資為:earn()print();p=&h1;p-print();3、#include iostream.h#include math.hconst

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論