第八章問題多態(tài)性、運算符重載、純虛函數(shù)、抽象類.doc_第1頁
第八章問題多態(tài)性、運算符重載、純虛函數(shù)、抽象類.doc_第2頁
第八章問題多態(tài)性、運算符重載、純虛函數(shù)、抽象類.doc_第3頁
第八章問題多態(tài)性、運算符重載、純虛函數(shù)、抽象類.doc_第4頁
第八章問題多態(tài)性、運算符重載、純虛函數(shù)、抽象類.doc_第5頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

多態(tài)性、運算符重載、純虛函數(shù)、抽象類83 練習題 1什么是多態(tài)性?為什么說它是面向?qū)ο蟪绦蛟O計的一個重要機制? 2函數(shù)重載的含義是什么?定義重載函數(shù)時應注意些什么問題? 3運算符重載的含義是什么?是否所有的運算符都可以重載? 4運算符重載有哪兩種形式?這兩種形式有何區(qū)別? 5運算符重載函數(shù)使用關鍵字con st說明后,是指什么不可改變? 6靜態(tài)聯(lián)編和動態(tài)聯(lián)編的區(qū)別是什么? 7什么是虛函數(shù)?為什么要定義虛函數(shù)?它與動態(tài)聯(lián)編有何關系? 8什么是純虛函數(shù)?什么是抽象類? 9虛析構函數(shù)有什么作用? 10總結(jié)C+語言的多態(tài)性包含哪些內(nèi)容?84 作業(yè)題一、選擇填空對定義重載函數(shù)的下列要求中。( )是錯誤的A要求參數(shù)的個數(shù)不同B要求參數(shù)中至少有一個類型不同C要求參數(shù)個數(shù)相同時。參數(shù)類型不同D要求函數(shù)的返回值不同2.下列函數(shù)中,( ) 不能重載。A成員函數(shù) B非成員函數(shù) C析構函數(shù) D構造函數(shù) 3下列對重載函數(shù)的描述中,( )是錯誤的。 A重載函數(shù)中不允許使用默認參數(shù) B重載函數(shù)中編譯系根據(jù)參數(shù)表進行選擇 C不要使用重載函數(shù)來描述毫無相干的函數(shù) D構造函數(shù)重載將會給初始化帶來多種方式 4下列運算符中,( )運算符不能重載。 A & B C : D new 5下列關于運算符重載的描述中,( )是正確的。 A運算符重載可以改變操作數(shù)的個數(shù) B運算符重載可以改變優(yōu)先級 C運算符重載可以改變結(jié)合性 D運算符重載不可以改變語法結(jié)構。 6運算符重載函數(shù)是( )。 A成員函數(shù) B友元函數(shù) C內(nèi)聯(lián)函數(shù) D帶默認參數(shù)的函數(shù) 7關于動態(tài)聯(lián)編的下列描述中,( )是錯誤的。 A動態(tài)聯(lián)編是以虛函數(shù)為基礎的 B動態(tài)聯(lián)編是在運行時確定所調(diào)用的函數(shù)代碼的 C動態(tài)聯(lián)編調(diào)用函數(shù)操作是用指向?qū)ο蟮闹羔樆驅(qū)ο笠?D動態(tài)聯(lián)編是在編譯時確定操作函數(shù)的 8關于虛函數(shù)的描述中,( )是正確的。 A虛函數(shù)是一個static類型的成員函數(shù) B虛函數(shù)是一個非成員函數(shù) C基類中說明了虛函數(shù)后,派生類中將其對應的函數(shù)可不必說明為虛函數(shù)D.派生類的虛函數(shù)與基類的虛函數(shù)具有不同的參數(shù)個數(shù)和類型9關于純虛函數(shù)和抽象類的描述中,( )是錯誤的。 A純虛函數(shù)是一種特殊的虛函數(shù),它沒有具體的實現(xiàn) B抽象類是指具有純虛函數(shù)的類 C一個基類中說明有純虛函數(shù),該基類的派生類一定不再是抽象類 D抽象類只能作為基類來使用,其純虛函數(shù)的實現(xiàn)由派生類給出 10下列描述中,( )是抽象類的特性。 A可以說明虛函數(shù) B可以進行構造函數(shù)重載 C可以定義友元函數(shù) D不能說明其對象 二、判斷下列描述的正確性,對者劃,錯者劃1函數(shù)的參數(shù)個數(shù)和類型都相同,只是返回值不同,這不是重載函數(shù)。2重載函數(shù)可以帶有默認值參數(shù),但是要注意二義性。3多數(shù)運算符可以重載,個別運算符不能重載,運算符重載是通過函數(shù)完現(xiàn)的。4對每個可重載的運算符來講,它既可以重載為友元函數(shù),又可以重載為成員函數(shù),還可以重載為非成員函數(shù)。5對單目運算符重載為友元函數(shù)時,說明一個形參;重載為成員函數(shù)時,j式說明形參。6重載運算符保持原運算符的優(yōu)先級和結(jié)合性不變。7虛函數(shù)是用virtual關鍵字說明的成員函數(shù)。8構造函數(shù)說明為純虛函數(shù)是沒有意義的。9抽象類是指一些沒有說明對象的類。10動態(tài)聯(lián)編是在運行時選定調(diào)用的成員函數(shù)的。 三、分析下列程序的輸出結(jié)果 1 #includeinostram.h class Bpublic: B(int i)b=i+50; show(); B()Virtual void show( ) cout”B:show()called”bendl;Protected: int b:class D:public BPublic: D(int i):B(t) di十100;show(); D() void show()cout”DC:show(0 called.”dendl;protected:int d:; void main() D d1(108); 分析: 該程序中定義了B類和D類兩個類。其中,D類是公有繼承B類的派生類。在主函數(shù)中,僅創(chuàng)建一個D類對象d1,于是調(diào)用D類的構造函數(shù),先調(diào)用基類B的構造函數(shù),給數(shù)據(jù)成員b初始化,又調(diào)用B類的show()函數(shù),輸出顯示如下信息。 B:show(0 called.158接著執(zhí)行派生類D的構造函數(shù)體,給數(shù)據(jù)成員d初始化,又調(diào)用D類的show()函數(shù),輸出顯示如下信息。 D:show(0 called.208 請讀者思考。將B類中show()函數(shù)說明為virtual函數(shù)時,輸出結(jié)果會有變化嗎?再將D類繼承B類的方式改為私有,輸出結(jié)果會有變化嗎?為什么?2#include class B public: B() B(int i)b=i;Virtual void virfun( )cout”B:virfun()calledn”;private: int b;class D:public B public: D() D(int i,int j):B(i)dj;) Prtvate: int d; void virfun()cout”D:virfun()calledn”;;void fun(B*obj)obj一virfun();void main() D * pdnew D;fun(pd); 分析: 該程序中,定義了派生類D公有繼承基類B,基類B中說明了非靜態(tài)成員函數(shù)virfun()為虛函數(shù)在派生類D中對它進行了重新定義。在一般函數(shù)fun()中,通過對象指針來調(diào)用虛函數(shù),于是實現(xiàn)了動態(tài)聯(lián)編,輸出顯示上述結(jié)果。 請讀者思考下列問題。 (1)將一般函數(shù)fun()的形參改為D類的對象,并做相應修改后,輸出結(jié)果會改變嗎?為什么? (2)僅將B類中virfun()函數(shù)前邊virtual關鍵字去掉,其余不變,輸出結(jié)果會改變嗎?為什么? (3)僅將D類繼承B類的方式改為私有,其余不變,編譯該程序時會出現(xiàn)什么錯誤?為什么? 3 材includeiostream。hClass A public: A()verA; void print() cout”The A version”verendl; protected:Char ver;class D1:public A public:D1(int number) infonumber; ver=1;void print()cout”The D1 info:”info”version”verendl; private: int info;class D2:public A public: D2(int number) infonumber; void print( ) cout”The D2 info:”info”version”verendI; private:int info;class D3:public D1 publjc:D3(int number):D1(number) info:number;ver=3; void print() cout”The D3 info :”info”version”verendl; prnvate: int info;void Print_info(A *p) p一print();void main() A a; D1 d1(4); D2 d2(100); D3 d3(一25); print_info(&a); print_info(&d1); print_info(d2); print_info(& d3); 分析: 該程序中,定義一個基類A,又定義兩個派生類D1和D2,它們公有繼承基類A.又定義一個派生類D3,它公有繼承Dl類。定義一個一般函數(shù)羅print_info(),它的形參是指向?qū)ο蟮闹羔?。主函?shù)中定義了4個類的4個對象,并用它們的地址值

溫馨提示

  • 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

提交評論