版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、一、單選題 1二、多選題 2三、填空題 2四、判斷題 2五、簡答題 2六、程序分析題 7七、編程題 11一、單選題1.在每個C+程序中都必須包含有這樣一個函數(shù),該函數(shù)的函數(shù)名為 ( A )。A. main B. MAIN C. name
2、0; D. function2假定AB為一個類,則執(zhí)行“AB a(4 , b3 , * p2 ;”語句時,自動調(diào)用該類構(gòu)造函數(shù)的次數(shù)為 (B)。A. 3 B. 4 C. 6
3、; D. 93.假定要對類AB定義加號操作符重載成員函數(shù),實(shí)現(xiàn)兩個AB類對象的加法,并返回相加結(jié)果,則該成員函數(shù)的聲明語句為:( B )。A. AB operator+(AB & a , AB & b B. AB operator+(AB & a
4、C. operator+(AB a D. AB & operator+( 4. 關(guān)于virtual void Draw(=0,下面說法正確的有幾個(C) (1它是純虛函數(shù)(對(2它在定義它的類中不能實(shí)現(xiàn)(對(3定義它的類不可實(shí)例化(對(4如果一個類要繼承一個ADT類,必須要實(shí)現(xiàn)其
5、中的所有純虛函數(shù)(錯/可以不實(shí)現(xiàn),派生之后的類仍舊作為一個抽象類.A. 1 B. 2C. 3 D. 45. 下面哪一本C+參考書最厚? ( C)A. Think in C+ B. 深入淺出MFCC. C+ Primer D. Effective C+ 6. stl:deque是一種什么數(shù)據(jù)類型? (A )A. 動態(tài)數(shù)組 B. 鏈表C. 堆棧 D. 樹 7. STL庫里含有下面的哪一種泛型算法? (D )A. KMP查找 B. 折半查找C. 冒泡排序 D. 快速排序 8. 下面哪一個不是C+的標(biāo)準(zhǔn)數(shù)據(jù)類型? ( D) A. int B. charC. bool D. real9. 類的繼承方式有
6、幾種? (B ) A. 兩種 B. 三種C. 四種 D. 六種10. extern關(guān)鍵字的作用是什么? (D)A. 聲明外部鏈接 B. 聲明外部頭文件引用C. 聲明使用擴(kuò)展C+語句 D. 聲明外部成員函數(shù)、成員數(shù)據(jù)。11 C+語言是從早期的C語言逐漸發(fā)展演變而來的.與C語言相比,它在求解 問題方法上進(jìn)行的最大改進(jìn)是(b) A面向過程B面向?qū)ο驝安全性D復(fù)用性 12 C+語言的跳轉(zhuǎn)語句中,對于break和continue說法正確的是(c) Abreak語句只應(yīng)用與循環(huán)體中 Bcontinue語句只應(yīng)用
7、與循環(huán)體中 Cbreak是無條件跳轉(zhuǎn)語句,continue不是 Dbreak和continue的跳轉(zhuǎn)范圍不夠明確,容易產(chǎn)生問題 13 for(int x=,y=o;!x& &y<=5;y+語句執(zhí)行循環(huán)的次數(shù)是(c) ABCD無次數(shù) 14考慮函數(shù)原型void test(int a,int b=7,char="*",下面的函數(shù)調(diào)用中,屬于不合法調(diào)用的是(c) Ate
8、st(5; Btest(5,8; Ctest(6,"#" Dtest(0,0."*" 15下面有關(guān)重載函數(shù)的說法中正確的是(c) A重載函數(shù)必須具有不同的返回值類型;B重載函數(shù)形參個數(shù)必須不同; C重載函數(shù)必須有不同的形參列表D重載函數(shù)名可以不同; 16下列關(guān)于構(gòu)造函數(shù)的描述中,錯誤的是(d) A構(gòu)造函數(shù)可以設(shè)置默認(rèn)參數(shù);B構(gòu)造函數(shù)在定義類對象時自動執(zhí)行 C構(gòu)造函數(shù)可以是內(nèi)聯(lián)函數(shù);D
9、構(gòu)造函數(shù)不可以重載 17下面描述中,表達(dá)錯誤的是(b) A公有繼承時基類中的public成員在派生類中仍是public的 B公有繼承是基類中的private成員在派生類中仍是private的 C公有繼承時基類中的protected成員在派生類中仍是protected的 D私有繼承時基類中的public成員在派生類中是private的 18應(yīng)在下列程序劃線處填入的正確語句是(c) #include clas
10、s Base public: void fun(cout<<"Base:fun"< ; class Derived:public Base void fun( _ / 顯示調(diào)用基類的函數(shù) fun( cout<<"Derived:fun"< ;
11、Afun(; BBase.fun(; CBase:fun(; D Base->fun(; 19 有如下程序: (A)#include #include using namespace std;class BASEchar c;public:BASE(char n:c(nvirtualBASE(cout< ;class DERIVED:public BASEchar c; public: DERIVED(char n:BASE(n+1,c(nDERIVED(cout< ; int main(
12、DERIVED('x'return 0; 執(zhí)行上面的程序?qū)⑤敵觯ǎ?#160; AXY BYX CX DY 20 C+ 類體系中,不能被派生類繼承的有( b)。 A 、 轉(zhuǎn)換函數(shù) B 、 構(gòu)造函數(shù) C 、 虛函數(shù) D 、 靜態(tài)成員函數(shù) 21 、每個類( c )構(gòu)造函數(shù)。 A 、只能有一個 B 、只可有公有的 C 、可以有多個 D 、只可有缺省的 22 、在一個類中可以對一個操作符進(jìn)行( d )重載。 A 、 1 種 B 、 2 種以下 C 、 3 種以下 D 、多種 23 、重載賦值操作
13、符時,應(yīng)聲明為( c )函數(shù)。 A 、 友元 B 、 虛 C 、 成員 D 、 多態(tài) 24 、在公有繼承的情況下,基類成員在派生類中的訪問權(quán)限( b ) A 、 受限制 B 、 保持不變 C 、 受保護(hù) D 、 不受保護(hù) 25 、通過( a )調(diào)用虛函數(shù)時,采用動態(tài)綁定。 A 、 對象指針 B 、 對象名 C 、 成員名限定 D 、 派生類名 二、多選題1、下列哪些寫法是對的,而且是常量。 ( ABCEGH正確,D錯誤 )A 125 B -.456 C 1.25e20 D 'AB'E E6 F 0238 G 0xabcdef H "n'123"2.
14、下面哪些運(yùn)算符不能被重載? (ABD )A. 做用域運(yùn)算符“:” B. 對象成員運(yùn)算符“.”C. 指針成員運(yùn)算符“->” D. 三目運(yùn)算符“? :”3. 以下說法正確的是? ( ABC)A. 頭文件中的 ifndef/define/endif 是為了防止該頭文件被重復(fù)引用。B. 對于#include ,編譯器從標(biāo)準(zhǔn)庫路徑開始搜索 filename.h對于#include “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.hC. C+語言支持函數(shù)重載,C語言不支持函數(shù)重載。函數(shù)被C+編譯后在庫中的名字與C 語言的不同。D. fopen函數(shù)只是把文件目錄信息調(diào)入內(nèi)
15、存。4. vector:iterator重載了下面哪些運(yùn)算符? (ACD) A. + B. >>C. *(前置) D. = 5已知系統(tǒng)中已定義函數(shù)fp,其原形是: int fp(char c,int k=0,double d=100.0; 則下列函數(shù)中可以加以重載的是( AD )。 A.int fp(; B.int fp(char c; C.int fp(char,int; D.int fp(char,int,int;原因如下:int k=0,double d=100.0 上面的形式已經(jīng)指定 后兩個參數(shù)等于可以省略 所以 fp可以有3鐘調(diào)用方式: fp(c-> fp(char
16、 fp(c,k-> fp(char int fp(c,k,d -> fp(char int double A沒有用到可以重載 D的最后參數(shù)是int,可以重載三、填空題1. 計算反正弦的庫函數(shù)是_asin(_;計算浮點(diǎn)數(shù)絕對值的庫函數(shù)是_fabs(_;計算浮點(diǎn)數(shù)n次方的庫函數(shù)是_pow(_;將浮點(diǎn)數(shù)轉(zhuǎn)化為字符串的庫函數(shù)是_fcvt(_。2. new和_delete_對應(yīng),malloc和_free_對應(yīng),他們之間_ 不能_交叉混用。calloc的功能是_動態(tài)分配內(nèi)存,并初始化數(shù)值為0_,realloc的功能是_改變原有內(nèi)存區(qū)域的大小_。3. C+的特性有(抽象、封裝、繼承、多態(tài)性)4.
17、下面程序的打印結(jié)果是_ 1 2 5 11 21_ #incude int f(int; int main( int i; for(i=0;i<5;i+ cout< return0; int f(int i static int k=1; for(;i
18、>0;i- - k + = i; return k; 5.在用class定義一個類時,數(shù)據(jù)成員和成員函數(shù)的默認(rèn)訪問權(quán)限是 private 6.含有純虛函數(shù)的類稱為 抽象基類7.已知int DBL(int nreturn n + n;和long DBL(long nreturn n+n;是一個函數(shù)模板的兩個實(shí)例,則該函數(shù)模板的定義是
19、0;template T DBL(T n return n+n; 8.在下面程序的橫線處填上適當(dāng)?shù)恼Z句,使該程序執(zhí)行結(jié)果為10. #include class MyClass public: MyClass(int ax = a; MyClass GETNUM(return x; /取x值 private int x; ;&
20、#160; int main( MyClass my(10; cout< return 0; 9.描述命題 “A 小于 B 或小于 C” 的表達(dá)式為A 。 10.對嵌套 if 語句的規(guī)定是: else 總是與else if 配對。 11在 C+ 中有二種參數(shù)傳遞方式: 值傳遞和地址傳遞12定義重載函數(shù)時,應(yīng)在 參數(shù)的數(shù)量或類型有所不同。 13類是用戶定義的類型,具有類類型的變量稱作類對象。 14 當(dāng)建立一個新對象時,程序自動調(diào)用類的構(gòu)造函
21、數(shù)。 15一元操作符,作為友元函數(shù)重載時只能聲明1形參;作為類成員函數(shù)重載時0形參。四、判斷題(1)函數(shù)體內(nèi)聲明的靜態(tài)變量,至多只會被初始化一次。 r(2)對于同一個類中的兩個非靜態(tài)成員函數(shù),它們的函數(shù)的名稱、參數(shù)類型、參數(shù)個數(shù)、參數(shù)順序以及返回值的類型不能完全相同。 r(3)inline函數(shù)表示編譯器一定會將函數(shù)體直接插入到調(diào)用此函數(shù)的地方,這樣可以加快程序的運(yùn)行速度。 w(4)將類A所有構(gòu)造函數(shù)的可訪問性都限制為私有的,那么在main函數(shù)中不可能得到類A的實(shí)例對象。 r(5)名字空間是可以多層嵌套的;對于類A中的函數(shù)成員和數(shù)據(jù)成員,它們都屬于類名A代表的一層名字空間。 r(6)若在類Bas
22、e和派生類Derived中,分別聲明一個同名的整型成員變量int x; ,那么通過Derived類的實(shí)例對象,不可能輸出基類Base中的變量x的值。 W(7)若類A是類B的友員類,且類B是類C的友員類,那么類A也是類C的友員類。 w(8)雖然抽象類的析構(gòu)函數(shù)可以是純虛函數(shù),但要實(shí)例化其派生類對象,仍必須提供抽象基類中析構(gòu)函數(shù)的函數(shù)體。 w(9)構(gòu)造函數(shù)的初始化列表中的內(nèi)容,不會影響構(gòu)造對象中成員數(shù)據(jù)的初始化順序。 r五、簡答題1為什么標(biāo)準(zhǔn)頭文件都有類似以下的結(jié)構(gòu)? #ifndef _INCvxWorksh#define _INCvxWorksh #ifdef _cplusplusextern
23、"C" #endif /*.*/ #ifdef _cplusplus#endif #endif /* _INCvxWorksh */ 解答:頭文件中的編譯宏#ifndef_INCvxWorksh#define_INCvxWorksh#endif 的作用是防止被重復(fù)引用。作為一種面向?qū)ο蟮恼Z言,C+支持函數(shù)重載,而過程式語言C則不支持。函數(shù)被C+編譯后在symbol庫中的名字與C語言的不同。例如,假設(shè)某個函數(shù)的原型為: void foo(int x, int y; 該函數(shù)被C編譯器編譯后在symbol庫中的名字為_foo,而C+編譯器則會產(chǎn)生像_foo_int_int之類的名
24、字。_foo_int_int這樣的名字包含了函數(shù)名和函數(shù)參數(shù)數(shù)量及類型信息,C+就是考這種機(jī)制來實(shí)現(xiàn)函數(shù)重載的。為了實(shí)現(xiàn)C和C+的混合編程,C+提供了C連接交換指定符號extern "C"來解決名字匹配問題,函數(shù)聲明前加上extern "C"后,則編譯器就會按照C語言的方式將該函數(shù)編譯為_foo,這樣C語言中就可以調(diào)用C+的函數(shù)了。2. 什么時候需要“引用”?流操作符<<和>>、賦值操作符=的返回值、拷貝構(gòu)造函數(shù)的參數(shù)、賦值操作符=的參數(shù)、其它情況都推薦使用引用。3. “引用”與多態(tài)的關(guān)系?引用是除指針外另一個可以產(chǎn)生多態(tài)效果的手
25、段。這意味著,一個基類的引用可以指向它的派生類實(shí)例。4.函數(shù)模板與類模板有什么區(qū)別?答:函數(shù)模板的實(shí)例化是由編譯程序在處理函數(shù)調(diào)用時自動完成的,而類模板的實(shí)例化必須由程序員在程序中顯式地指定。5. 請講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?答:析構(gòu)函數(shù)也是特殊的類成員函數(shù),它沒有返回類型,沒有參數(shù),不能隨意調(diào)用,也沒有重載。只是在類對象生命期結(jié)束的時候,由系統(tǒng)自動調(diào)用釋放在構(gòu)造函數(shù)中分配的資源。這種在運(yùn)行時,能依據(jù)其類型確認(rèn)調(diào)用那個函數(shù)的能力稱為多態(tài)性,或稱遲后聯(lián)編。另: 析構(gòu)函數(shù)一般在對象撤消前做收尾工作,比如回收內(nèi)存等工作,虛擬函數(shù)的功能是使子類可以用同名的函數(shù)對父類函數(shù)進(jìn)行覆蓋,并且在調(diào)用時
26、自動調(diào)用子類覆蓋函數(shù),如果是純虛函數(shù),則純粹是為了在子類覆蓋時有個統(tǒng)一的命名而已。注意:子類重新定義父類的虛函數(shù)的做法叫覆蓋,override,而不是overload(重載,重載的概念不屬于面向?qū)ο缶幊?重載指的是存在多個同名函數(shù),這些函數(shù)的參數(shù)表不同.重載是在編譯期間就決定了的,是靜態(tài)的,因此,重載與多態(tài)無關(guān).與面向?qū)ο缶幊虩o關(guān).含有純虛函數(shù)的類稱為抽象類,不能實(shí)例化對象,主要用作接口類/7.函數(shù)重載是什么意思?它與虛函數(shù)的概念有什么區(qū)別?答:函數(shù)重載是一個同名函數(shù)完成不同的功能,編譯系統(tǒng)在編譯階段通過函數(shù)參數(shù)個數(shù)、參數(shù)類型不同,函數(shù)的返回值來區(qū)分該調(diào)用哪一個函數(shù),即實(shí)現(xiàn)的是靜態(tài)的多態(tài)性。但
27、是記?。翰荒軆H僅通過函數(shù)返回值不同來實(shí)現(xiàn)函數(shù)重載。而虛函數(shù)實(shí)現(xiàn)的是在基類中通過使用關(guān)鍵字virtual來申明一個函數(shù)為虛函數(shù),含義就是該函數(shù)的功能可能在將來的派生類中定義或者在基類的基礎(chǔ)之上進(jìn)行擴(kuò)展,系統(tǒng)只能在運(yùn)行階段才能動態(tài)決定該調(diào)用哪一個函數(shù),所以實(shí)現(xiàn)的是動態(tài)的多態(tài)性。它體現(xiàn)的是一個縱向的概念,也即在基類和派生類間實(shí)現(xiàn)。8.問答有如下類定義:class Bint *m_iPoint;char m_sLength;static int m_iTotal;public:virtual B(;假設(shè)在32位的操作系統(tǒng)和編譯器下,int型變量為4個字節(jié),按4字節(jié)方式對齊,請問sizeof(B)的大小
28、為多少?并說明這個大小是怎么計算出來的? 答:12 。理由:m_iPoint占用4,采用4字節(jié)對齊,m_sLength也占用4個字節(jié);static int m_iTotal不占用空間,它是對象間共享的數(shù)據(jù),占用自己單獨(dú)的空間;另外4個字節(jié)占用是因?yàn)槲鰳?gòu)函數(shù)為虛函數(shù),所以有一個虛函數(shù)指針!9.請針對以下關(guān)鍵字static,const,virtual,friend的使用場合,舉例說明他們在函數(shù)的聲明,定義中的用法,并說明使用這些關(guān)鍵詞的作用。 答:1static修飾一個函數(shù)為靜態(tài)成員函數(shù),在聲明的時候有,定義的時候沒有。用來生命一個函數(shù)是靜態(tài)成員函數(shù),用來訪問靜態(tài)成員變量:static int f
29、un(;int CMyclass: fun(2const修飾一個函數(shù)為靜態(tài)成員函數(shù),在聲明的時候有,定義的時候也有。說明一個函數(shù)是常成員函數(shù),便是他不能修改該類的成員變量int fun( const;int CMyclass: fun(const 3 virtual在基類中用來修飾一個函數(shù)為虛函數(shù),在聲明的時候有,定義的時候沒有。說明一個函數(shù)是虛函數(shù),可以在派生類中來對他的功能進(jìn)行定義或者擴(kuò)展;virtual int fun(;int CMyclass: fun(4 friend修飾一個函數(shù)為友元函數(shù),在聲明的時候有,定義的時候沒有。說明一個函數(shù)是該類的友元函數(shù),可以在該函數(shù)中訪問類的非公有成
30、員;friendint fun(;int CMyclass: fun(/訪問非公有成員10.談?wù)勀銓\(yùn)算符new,delete,malloc,free的理解。 答:運(yùn)算符new用來向系統(tǒng)動態(tài)開辟堆內(nèi)存空間,delete用來釋放new開辟堆內(nèi)存空間。記住兩者配套使用,防止內(nèi)存泄漏;釋放指針指向的內(nèi)存空間,而不是刪掉指針!釋放后指針的地址值不變,所以為了防止產(chǎn)生野指針,釋放后最好將指針賦值為空。記住若果開辟的是動態(tài)數(shù)組,應(yīng)該加上,表示釋放的是數(shù)組空間。malloc是c語言庫函數(shù),也是用來開辟空間,開辟的空間使用完以后使用free函數(shù)釋放,同理釋放完后也需要將指針賦值為空。跟new運(yùn)算符不同的是ma
31、lloc在開辟的空間的時候不能初始化,開辟空間的字節(jié)數(shù)需要指明,new運(yùn)算符可以初始化,開辟空間的字節(jié)數(shù)由系統(tǒng)計算出來。11派生類B有與父類A相同名稱的共有成員Member,請問在B中如何訪問A中的公有成員Member? (5分)答:域限定符指明它屬于哪個類;12.對于一個頻繁使用的短小函數(shù),在C語言中應(yīng)用什么實(shí)現(xiàn),在C+中應(yīng)用什么實(shí)現(xiàn)? c用宏定義,c+用inline13Template有什么特點(diǎn)?什么時候用?答: Template可以獨(dú)立于任何特定的類型編寫代碼,是泛型編程的基礎(chǔ).當(dāng)我們編寫的類和函數(shù)能夠多態(tài)的用于跨越編譯時不相關(guān)的類型時,用Template.模板主要用于STL中的容器,算
32、法,迭代器等以及模板元編程.14. main 函數(shù)執(zhí)行以前,還會執(zhí)行什么代碼?答案:全局對象的構(gòu)造函數(shù)會在main 函數(shù)之前執(zhí)行。15. 描述內(nèi)存分配方式以及它們的區(qū)別?1) 從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運(yùn)行期間都存在。例如全局變量,static 變量。2) 在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集。3) 從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運(yùn)行的時候用malloc 或new 申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用free 或
33、delete 釋放內(nèi)存。動態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活,但問題也最多。16.當(dāng)一個類A 中沒有生命任何成員變量與成員函數(shù),這時sizeof(A的值是多少,如果不是零,請解釋一下編譯器為什么沒有讓它為零。答案:肯定不是零。舉個反例,如果是零的話,聲明一個class A10對象數(shù)組,而每一個對象占用的空間是零,這時就沒辦法區(qū)分A0,A1了。17.在C+ 程序中調(diào)用被 C 編譯器編譯后的函數(shù),為什么要加 extern “C”聲明?答:函數(shù)和變量被C+編譯后在符號庫中的名字與C語言的不同,被extern "C"修飾的變量和函數(shù)是按照C語言方式編譯和連接的。由于編譯后的名
34、字不同,C+程序不能直接調(diào)用C 函數(shù)。C+提供了一個C 連接交換指定符號extern“C”來解決這個問題。18.面向?qū)ο蟮娜齻€基本特征,并簡單敘述之?1. 封裝:將客觀事物抽象成類,每個類對自身的數(shù)據(jù)和方法實(shí)行protection(private, protected,public2. 繼承:廣義的繼承有三種實(shí)現(xiàn)形式:實(shí)現(xiàn)繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實(shí)現(xiàn)代碼)、接口繼承(僅使用屬性和方法,實(shí)現(xiàn)滯后到子類實(shí)現(xiàn))。前兩種(類繼承)和后一種(對象組合=>接口繼承以及純虛函數(shù))構(gòu)成了功能復(fù)用的兩種方式。3. 多態(tài):是將父對象設(shè)置成為和一個
35、或更多的他的子對象相等的技術(shù),賦值之后,父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運(yùn)作。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。六、程序分析題1.改錯,并解釋原因#include #include class CBufferchar * m_pBuffer;int m_size;public:CBuffer(m_pBuffer=NULL;CBuffer(Free(;void Allocte(int size (3) m_size=size;m_pBuffer= new charsize;private:void Free( if(m_pBuffer!=NUL
36、Ldelete m_pBuffer;m_pBuffer=NULL;public:void SaveString(const char* pText conststrcpy(m_pBuffer, pText;char* GetBuffer( constreturn m_pBuffer;void main (int argc, char* argvCBuffer buffer1;buffer1.SaveString("Microsoft"printf(buffer1.GetBuffer(;答:改正后主要改正SaveString函數(shù)將void SaveString(const c
37、har* pText conststrcpy(m_pBuffer, pText;改為void SaveString(const char* pText (1)if(m_pBuffer!=NULLFree(;Allocte(strlen(pText+1; (2)strcpy(m_pBuffer, pText;原因:(1) const成員函數(shù)表示不會修改數(shù)據(jù)成員,而SaveString做不到,去掉const聲明(2) m_pBuffer指向NULL,必須用Allocte分配空間才能賦值。(3) 另外需要將Allocte成員函數(shù)聲明為私有成員函數(shù)更符合實(shí)際2寫出下面程序的輸出結(jié)果#include c
38、lass Apublic:void FuncA(printf("FuncA calledn"virtual void FuncB(printf("FuncB calledn"class B: public Apublic:void FuncA(A:FuncA(;printf("FuncAB calledn"virtual void FuncB(printf("FuncBB calledn"void main(voidB b;A *pa;pa=&b;A *pa2=new A;b.FuncA(; (1)b.Fu
39、ncB(; (2) pa->FuncA(; (3)pa->FuncB(; (4)pa2->FuncA(; (5)pa2->FuncB(;delete pa2;答:1b.FuncA(; 輸出FuncA calledFuncAB called2b.FuncB(;輸出FuncBB called上兩者好理解,直接調(diào)用類B的相應(yīng)成員函數(shù)3pa->FuncA(;輸出FuncA called 調(diào)用類A的FuncA(4pa->FuncB(;輸出FuncBB called調(diào)用類B的FuncB(,原因是C+的動態(tài)決議機(jī)制,當(dāng)基類函數(shù)聲明為virtual時,指向派生類對象的基類指
40、針來調(diào)用該函數(shù)會選擇派生類的實(shí)現(xiàn),除非派生類沒有才調(diào)用基類的虛函數(shù)。還有一點(diǎn)注意的是:指向基類類型的指針可以指向基類對象也可以指向派生類對象,如pa=&b;5. pa2->FuncA(;pa2->FuncB(;輸出FuncA calledFuncB called這也好理解,直接調(diào)用類A的相應(yīng)成員函數(shù)3請寫出程序運(yùn)行的結(jié)果 #include using namespace std; class base public: virtual void print( const cout<<"base:f("< ; class derived:p
41、ublic base public: virtual void print( const cout<<"derived:f("< ; void print(const base& obj obj.print(; int main( base* pb1=new derived(; print(*pb1; base* pb2=new base(*pb1; print(*pb2; base b=base(derived(; print(b; delete pb1; delete pb2; return 0; 答: deirived:f( base:f(b
42、ase:f(七、編程題1.實(shí)現(xiàn)一個整型鏈表類,支持插入,刪除操作(有特殊要求,都是在指定節(jié)點(diǎn)后進(jìn)行操作),并寫一個對鏈表數(shù)據(jù)進(jìn)行降序排序的方法。/ 單鏈表結(jié)構(gòu)體為typedef struct LNode int data;struct LNode *next;LNode, *pLinkList;/ 單鏈表類class LinkListprivate:pLinkList m_pList;int m_listLength;public:LinkList(;LinkList(;bool InsertAfter(int afternode, int data;/插入bool RemoveAfter(i
43、nt removenode;/刪除void sort(;/排序;/insert a node after a specified node, insert as the head node when afternode=0bool LinkList:InsertAfter(int afternode, int dataLNode *pTemp = m_pList;if (afternode > m_listLength | afternode<0 / 插入點(diǎn)超過總長度return false;for(int i=0;i NULL;i+ / 找到指定的節(jié)點(diǎn) pTemp = pTemp
44、->next;if (pTemp=NULL && m_pList!=NULL / 節(jié)點(diǎn)未尋到,錯誤退出return false;LNode *newNode = new LNode; / 將新節(jié)點(diǎn)插入指定節(jié)點(diǎn)后newNode->data = data;if(afternode=0newNode->next = pTemp;m_pList = newNode;elsenewNode->next = pTemp->next;pTemp->next = newNode;m_listLength+;return true;/remove the no
45、de after a specified node, remove the head node when removenode=0bool LinkList:RemoveAfter(int removenode LNode *pTemp = m_pList;/ 刪除點(diǎn)超過總長度if (removenode >= m_listLength | removenode<0return false;/ 找到指定的節(jié)點(diǎn)for(int i=0;i next != NULL;i+ pTemp = pTemp->next;if(pTemp->next=NULL && r
46、emovenode!=0/最后一個節(jié)點(diǎn),后面沒有節(jié)點(diǎn)可以刪除return false;if(removenode=0m_pList=pTemp->next;delete pTemp;elseLNode *pDel = pTemp->next;pTemp->next=pDel->next;delete pDel;m_listLength-;return true;/sort the linked list to descending order.void LinkList:sort(if (m_listLength<=1return;LNode *pList2 =
47、m_pList;/新建一個鏈表m_pList=m_pList->next;pList2->next=NULL;for(int i=0;i LNode *pTemp=pList2;LNode *pPre=NULL;if(pTemp->data data / 插入到新鏈表變成頭節(jié)點(diǎn)pPre=m_pList;m_pList=m_pList->next;pPre->next=pTemp;pList2=pPre;elsewhile(pTemp!=NULL && pTemp->data > m_pList->data /尋找插入位置pPre=pTemp;pTemp=pTemp->next;pTemp=m_pList;m_pList=m_pList->next;pTemp->next=pPre->next;pPre->next=pTemp;m_pList=pList2;2編寫類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù),已知類String的原型為:class String public: String(const char *str = NULL; / 普通構(gòu)造函數(shù) String(const String &other; / 拷貝構(gòu)造函數(shù) String(voi
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租房協(xié)議書游戲
- 2025年度個人住房按揭貸款合同協(xié)議3篇
- 2025年度個人房產(chǎn)租賃押金返還融資協(xié)議4篇
- 2025年度鋼材貿(mào)易代理與結(jié)算服務(wù)合同
- 2025-2030全球單深位旋轉(zhuǎn)伸縮貨叉行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球奶酪凝乳酶行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球棉籽濃縮蛋白 (CPC)行業(yè)調(diào)研及趨勢分析報告
- 2024年軍隊文職人員招聘考試《教育學(xué)》模擬卷2
- 外教聘請中介合同合同協(xié)議
- 2025年度個人挖掘機(jī)租賃安全責(zé)任合同4篇
- 2024公路瀝青路面結(jié)構(gòu)內(nèi)部狀況三維探地雷達(dá)快速檢測規(guī)程
- 浙江省臺州市2021-2022學(xué)年高一上學(xué)期期末質(zhì)量評估政治試題 含解析
- 2024年高考真題-地理(河北卷) 含答案
- 中國高血壓防治指南(2024年修訂版)解讀課件
- 2024年浙江省中考科學(xué)試卷
- 初三科目綜合模擬卷
- 2024風(fēng)力發(fā)電葉片維保作業(yè)技術(shù)規(guī)范
- 《思想道德與法治》課程教學(xué)大綱
- 2024光儲充一體化系統(tǒng)解決方案
- 2024年全國高考新課標(biāo)卷物理真題(含答案)
- 處理后事授權(quán)委托書
評論
0/150
提交評論