華科研究生C++復(fù)習(xí)50題和答案_第1頁(yè)
華科研究生C++復(fù)習(xí)50題和答案_第2頁(yè)
華科研究生C++復(fù)習(xí)50題和答案_第3頁(yè)
華科研究生C++復(fù)習(xí)50題和答案_第4頁(yè)
華科研究生C++復(fù)習(xí)50題和答案_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、復(fù)習(xí)范圍:所有講過(guò)的內(nèi)容。下面的復(fù)習(xí)題基本涵蓋所有考試內(nèi)容,請(qǐng)認(rèn)真作答,并重在理解。考試時(shí)間:2014.4.26 14:3017:00簡(jiǎn)答題1什么是程序?什么是程序設(shè)計(jì)?什么是程序設(shè)計(jì)語(yǔ)言?程序是用程序設(shè)計(jì)語(yǔ)言表示的計(jì)算機(jī)的解題算法或解題任務(wù)。程序設(shè)計(jì)是將解題任務(wù)轉(zhuǎn)變?yōu)槌绦虻倪^(guò)程。程序設(shè)計(jì)語(yǔ)言是由一些符號(hào)所構(gòu)成的集合,這些符號(hào)可用于定義、組織并完成各種各樣的計(jì)算任務(wù)。2類(lèi)型的強(qiáng)弱指的是什么?什么是無(wú)類(lèi)型語(yǔ)言、強(qiáng)類(lèi)型語(yǔ)言、弱類(lèi)型語(yǔ)言?C+語(yǔ)言屬于哪種?強(qiáng)類(lèi)型定義語(yǔ)言:一種總是強(qiáng)制類(lèi)型定義的語(yǔ)言,要求變量的使用要嚴(yán)格符合定義,所有變量都必須先定義后使用。java、.NET、C+等都是強(qiáng)制類(lèi)型定義的

2、。也就是說(shuō),一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類(lèi)型,如果不經(jīng)過(guò)強(qiáng)制轉(zhuǎn)換,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類(lèi)型了。與其相對(duì)應(yīng)的是弱類(lèi)型語(yǔ)言:數(shù)據(jù)類(lèi)型可以被忽略的語(yǔ)言。它與強(qiáng)類(lèi)型定義語(yǔ)言相反, 一個(gè)變量可以賦不同數(shù)據(jù)類(lèi)型的值。3什么是抽象數(shù)據(jù)類(lèi)型?C+是通過(guò)什么方式實(shí)現(xiàn)抽象數(shù)據(jù)類(lèi)型的?由一組對(duì)象和一組在這些對(duì)象上的操作所組成,利用數(shù)據(jù)抽象機(jī)制把一個(gè)數(shù)據(jù)類(lèi)型的表示和操作匯集起來(lái),封裝在一起,定義成一個(gè)新的數(shù)據(jù)類(lèi)型,這種新的數(shù)據(jù)類(lèi)型統(tǒng)稱(chēng)為抽象數(shù)據(jù)類(lèi)型。引入類(lèi)類(lèi)型。4C+中標(biāo)識(shí)符的命名規(guī)則是什么?什么是合法的標(biāo)識(shí)符,什么是不合法的標(biāo)識(shí)符1、大小寫(xiě)英文字母,下劃線(_),以及阿拉伯?dāng)?shù)字組成。2、標(biāo)識(shí)符的第一個(gè)字符必須是大

3、小寫(xiě)英文字母或者下劃線,而不能是數(shù)字。合法命名 非法命名wiggles $Z* /* $、 和 * 都是非法字符 */cat2 2cat /* 不能以數(shù)字開(kāi)頭 */Hot_Tub Hot-Tub /* - 是非法字符 */taxRate tax rate /* 不能有空格 */_kcab dont /* 是非法字符 */5什么是引用機(jī)制?指針和引用有什么區(qū)別和聯(lián)系?允許程序正文中通過(guò)引用為已有名字的內(nèi)存單元聲明新的名字,這個(gè)新名字成為該內(nèi)存單位已有名字的引用名,俗稱(chēng)別名。相同點(diǎn):都是地址的概念;指針指向一塊內(nèi)存,它的內(nèi)容是所指內(nèi)存的地址;引用是某塊內(nèi)存的別名。區(qū)別:1、指針是一個(gè)實(shí)體,而引用僅

4、是個(gè)別名;2、引用使用時(shí)無(wú)需解引用(*),指針需要解引用;3、引用只能在定義時(shí)被初始化一次,之后不可變;指針可變;4、引用沒(méi)有 const,指針有 const;5、引用不能為空,指針可以為空;6、 “sizeof 引用”得到的是所指向的變量(對(duì)象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或?qū)ο蟮牡刂?的大小;7、指針和引用的自增(+)運(yùn)算意義不一樣;8、從內(nèi)存分配上看:程序?yàn)橹羔樧兞糠峙鋬?nèi)存區(qū)域,而引用不需要分配內(nèi)存區(qū)域。聯(lián)系:在既能使用指針也能使用引用的情況下,使用引用要安全一些,因此應(yīng)該盡量使用引用。6函數(shù)調(diào)用時(shí)的兩種參數(shù)傳遞方式是什么?深入理解值調(diào)用和引用調(diào)用。一種

5、是按值傳遞,一種是按地址傳遞。按值傳遞就是在子函數(shù)中開(kāi)辟出一個(gè)臨時(shí)內(nèi)存空間,將傳遞的數(shù)值保存在這個(gè)空間中,當(dāng)子函數(shù)結(jié)束后,這個(gè)內(nèi)存空間就會(huì)釋放了。按地址傳遞則是把主函數(shù)開(kāi)辟的某個(gè)內(nèi)存空間首地址傳遞給子函數(shù),子函數(shù)可以直接讀寫(xiě)主函數(shù)上這段內(nèi)存空間,當(dāng)子函數(shù)結(jié)束后,這部分空間不會(huì)被釋放,主函數(shù)將繼續(xù)使用這段空間。傳值:函數(shù)調(diào)用入口參數(shù)時(shí),一般都會(huì)創(chuàng)建副本或者調(diào)用類(lèi)對(duì)象的拷貝構(gòu)造函數(shù),所以操作結(jié)束后入?yún)⒌闹禌](méi)有變化,變化的只是副本。引用:則是直接操作原來(lái)的對(duì)象,不會(huì)建立副本,對(duì)該對(duì)象做的操作,會(huì)直接影響到原來(lái)傳入的變量或者對(duì)象。C+傳值調(diào)用需要?jiǎng)?chuàng)建一個(gè)實(shí)參副本,所以要重新開(kāi)辟一塊內(nèi)存,進(jìn)行賦值拷貝動(dòng)

6、作。引用傳參,因?yàn)橐檬亲兞康膭e名,所以不需要進(jìn)行重新分配內(nèi)存,重新賦值,可以節(jié)約系統(tǒng)資源。7什么是內(nèi)聯(lián)函數(shù)??jī)?nèi)聯(lián)函數(shù)的作用是什么?用inline關(guān)鍵字定義的函數(shù)。內(nèi)聯(lián)函數(shù)不是在調(diào)用時(shí)發(fā)生控制轉(zhuǎn)移,而是在編譯時(shí)將函數(shù)體嵌入在每一個(gè)調(diào)用處。編譯時(shí),類(lèi)似宏替換,使用函數(shù)體替換調(diào)用處的函數(shù)名。作用:內(nèi)聯(lián)擴(kuò)展是用來(lái)消除函數(shù)調(diào)用時(shí)的時(shí)間開(kāi)銷(xiāo)。它通常用于頻繁執(zhí)行的函數(shù)。8使用class、struct和union關(guān)鍵字聲明類(lèi)的區(qū)別是什么?class對(duì)象封裝,具有多態(tài)等特性。struct的成員默認(rèn)是public的,是class的特列,class能對(duì)有對(duì)數(shù)據(jù)的隱秘機(jī)制,struct沒(méi)有。union,不論其內(nèi)部有

7、多少成員,在任意時(shí)刻,只有一個(gè)可用,因?yàn)樗谐蓡T公用的一個(gè)地址,其大小為最大那個(gè)數(shù)據(jù)的大小。9什么是封裝、繼承、派生、多態(tài)?封裝:隱藏內(nèi)部的行為和信息,使用者只用看到對(duì)外提供的接口和公開(kāi)的信息。繼承:可以利用已有的數(shù)據(jù)類(lèi)型來(lái)定義新的數(shù)據(jù)類(lèi)型。所定義的新的數(shù)據(jù)類(lèi)型不僅擁有新定義的成員,而且還同時(shí)擁有舊的成員。派生:從已有的類(lèi)(父類(lèi))產(chǎn)生一個(gè)新的子類(lèi),稱(chēng)為類(lèi)的派生。派生類(lèi)是基類(lèi)的具體化,而基類(lèi)則是派生類(lèi)的抽象。多態(tài):一種消息被不同類(lèi)型的對(duì)象接收時(shí)會(huì)導(dǎo)致不同行為的實(shí)現(xiàn)。10什么是對(duì)象?類(lèi)和對(duì)象有什么區(qū)別和聯(lián)系?類(lèi)是具有相同數(shù)據(jù)結(jié)構(gòu)(屬性)和相同操作功能(行為)對(duì)象的集合。對(duì)象就是符合某種類(lèi)所產(chǎn)生的一

8、個(gè)實(shí)例。對(duì)象與類(lèi)的關(guān)系是:對(duì)象的共性抽象為類(lèi),類(lèi)的實(shí)例化就是對(duì)象。11類(lèi)成員有哪三種訪問(wèn)控制權(quán)限?各自對(duì)類(lèi)成員的訪問(wèn)帶來(lái)什么影響?訪問(wèn)控制屬性有以下三種:public,private和protected。1、公有類(lèi)型成員用public關(guān)鍵字聲明,任何一個(gè)來(lái)自類(lèi)外部的訪問(wèn)都必須通過(guò)這種類(lèi)型的成員來(lái)訪問(wèn)(“對(duì)象.公有成員”)。公有類(lèi)型聲明了類(lèi)的外部接口。2、私有類(lèi)型成員用private聲明(若私有類(lèi)型成員緊接著類(lèi)名稱(chēng),可省略關(guān)鍵字),私有類(lèi)型的成員只允許本類(lèi)的成員函數(shù)來(lái)訪問(wèn),而類(lèi)外部的任何訪問(wèn)都是非法的。這樣完成了私有成員的隱蔽。 3、在不考慮繼承的情況下, 保護(hù)類(lèi)型(protected)的性質(zhì)和

9、私有類(lèi)型的性質(zhì)一致。即保護(hù)類(lèi)型和私有類(lèi)型的性質(zhì)相似,其差別在于繼承過(guò)程中對(duì)產(chǎn)生的新類(lèi)影響不同。就派生類(lèi)而言,保護(hù)保護(hù)成員對(duì)于他們來(lái)講好像就是共有成員。12.什么是拷貝賦值操作?為什么要對(duì)賦值操作的語(yǔ)義進(jìn)行擴(kuò)充?為類(lèi)對(duì)象中所有數(shù)據(jù)成員依次進(jìn)行拷貝賦值。因?yàn)樽蟛僮鲾?shù)為類(lèi)類(lèi)型的對(duì)象,簡(jiǎn)單賦值操作無(wú)法滿(mǎn)足需求。13.什么是成員函數(shù)的內(nèi)聯(lián)實(shí)現(xiàn)?有哪兩種形式?將類(lèi)中的成員函數(shù)定位為內(nèi)聯(lián)函數(shù)稱(chēng)為成員函數(shù)的內(nèi)聯(lián)實(shí)現(xiàn)。1、在類(lèi)聲明中完全定義實(shí)現(xiàn)的成員函數(shù)成為內(nèi)聯(lián)成員函數(shù)。2、用關(guān)鍵字inline定義的成員函數(shù)成為內(nèi)聯(lián)函數(shù)。14.什么是成員函數(shù)的重載?區(qū)分重載的標(biāo)識(shí)有哪些?在同一個(gè)類(lèi)中用一個(gè)標(biāo)示符為兩個(gè)或兩個(gè)以上

10、的成員函數(shù)命名成為成員函數(shù)的重載。參數(shù)的個(gè)數(shù)和參數(shù)的類(lèi)型可以作為重載函數(shù)相互區(qū)分的標(biāo)志。15什么是類(lèi)的靜態(tài)成員?定義類(lèi)的靜態(tài)成員的作用是什么?和普通類(lèi)成員相比有什么區(qū)別?在c+類(lèi)中聲明成員時(shí)可以加上static關(guān)鍵字,這樣聲明的成員就叫做靜態(tài)成員(包括數(shù)據(jù)成員和成員函數(shù))。在類(lèi)中,靜態(tài)成員可以實(shí)現(xiàn)多個(gè)對(duì)象之間的數(shù)據(jù)共享,并且使用靜態(tài)數(shù)據(jù)成員還不會(huì)破壞隱藏的原則,即保證了安全性。因此,靜態(tài)成員是類(lèi)的所有對(duì)象中共享的成員,而不是某個(gè)對(duì)象的成員。使用靜態(tài)數(shù)據(jù)成員可以節(jié)省內(nèi)存,因?yàn)樗撬袑?duì)象所公有的,因此,對(duì)多個(gè)對(duì)象來(lái)說(shuō),靜態(tài)數(shù)據(jù)成員只存儲(chǔ)一處,供所有對(duì)象共用。靜態(tài)數(shù)據(jù)成員的值對(duì)每個(gè)對(duì)象都是一樣,但

11、它的值是可以更新的。只要對(duì)靜態(tài)數(shù)據(jù)成員的值更新一次,保證所有對(duì)象存取更新后的相同的值,這樣可以提高時(shí)間效率。16靜態(tài)數(shù)據(jù)成員、常數(shù)據(jù)成員、基類(lèi)子對(duì)象、對(duì)象成員的初始化方式是什么?static int a;const int c;class Aprivate: int a;public: A();class BaseClassprivate: A a1;public BaseClass();類(lèi)名 對(duì)象名n(初值n);17理解和區(qū)分以下概念:常指針、指向常量的指針,舉例說(shuō)明。1.常量指針(常指針)int* const p特點(diǎn)是指針指向的數(shù)值可以改變,然而指針?biāo)4娴牡刂穮s不可以改變。2.指針常量c

12、onst int*p特點(diǎn)是指針?biāo)4娴牡刂房梢愿淖儯欢羔標(biāo)赶虻闹祬s不可以改變。同理,當(dāng)添加*p = b時(shí),會(huì)發(fā)生編譯錯(cuò)誤。3.指向常量的常指針const int const*p特點(diǎn)是指針?biāo)4娴牡刂凡豢勺?,指針?biāo)赶虻臄?shù)值也不可變。18、什么是構(gòu)造函數(shù)、析構(gòu)函數(shù)?它們能否被重載?構(gòu)造函數(shù):通俗的講,在類(lèi)中,函數(shù)名和類(lèi)名相同的函數(shù)稱(chēng)為構(gòu)造函數(shù)。它的作用是在建立一個(gè)對(duì)象時(shí),作某些初始化的工作(例如對(duì)數(shù)據(jù)賦予初值)。析構(gòu)函數(shù):當(dāng)一個(gè)類(lèi)的對(duì)象離開(kāi)作用域時(shí),析構(gòu)函數(shù)將被調(diào)用(系統(tǒng)自動(dòng)調(diào)用)。析構(gòu)函數(shù)的名字和類(lèi)名一樣,不過(guò)要在前面加上 。對(duì)一個(gè)類(lèi)來(lái)說(shuō),只能允許一個(gè)析構(gòu)函數(shù),析構(gòu)函數(shù)不能有參數(shù),并且也

13、沒(méi)有返回值。析構(gòu)函數(shù)的作用是完成一個(gè)清理工作,如釋放從堆中分配的內(nèi)存。構(gòu)造函數(shù)可以被重載,析構(gòu)函數(shù)不可以被重載。因?yàn)闃?gòu)造函數(shù)可以有多個(gè)且可以帶參數(shù),而析構(gòu)函數(shù)只能有一個(gè),且不能帶參數(shù)。 19.什么是缺省構(gòu)造函數(shù)?什么是有參構(gòu)造函數(shù)?缺省構(gòu)造函數(shù):當(dāng)聲明對(duì)象的時(shí)候,編譯器會(huì)調(diào)用一個(gè)構(gòu)造函數(shù)。若聲明的類(lèi)中沒(méi)有聲明構(gòu)造函數(shù),編譯器會(huì)自動(dòng)調(diào)用一個(gè)缺省構(gòu)造函數(shù),該函數(shù)相當(dāng)于一個(gè)不接受任何參數(shù),不進(jìn)行任何操作的構(gòu)造函數(shù)。而當(dāng)類(lèi)中已經(jīng)有聲明的構(gòu)造函數(shù)時(shí),編譯器就不會(huì)調(diào)用缺省構(gòu)造函數(shù)。有參構(gòu)造函數(shù):帶參數(shù)的構(gòu)造函數(shù)。Point類(lèi)聲明:Point();/缺省Point(int x,int y); /有參20.

14、什么是拷貝構(gòu)造函數(shù)?它會(huì)在哪些情況下被系統(tǒng)自動(dòng)調(diào)用?拷貝構(gòu)造函數(shù),是一種特殊的構(gòu)造函數(shù),它由編譯器調(diào)用來(lái)完成一些基于同一類(lèi)的其他對(duì)象的構(gòu)建及初始化。三種情況下系統(tǒng)自動(dòng)調(diào)用copy構(gòu)造函數(shù):1.定義語(yǔ)句中用同類(lèi)的已有對(duì)象初始化另一個(gè)對(duì)象.例如:Aa(b);2.將一個(gè)對(duì)象以按值傳遞的方式傳給另一個(gè)對(duì)象時(shí)生成對(duì)象副本.例如:Afun(Aa);3.生成一個(gè)臨時(shí)對(duì)象作為函數(shù)返回的結(jié)果.例如:returna;21什么是友元函數(shù)、友元類(lèi)?友元函數(shù)在聲明上與普通函數(shù)有什么區(qū)別?友元函數(shù)是指某些雖然不是類(lèi)成員卻能夠訪問(wèn)類(lèi)的所有成員的函數(shù)。類(lèi)授予它的友元特別的訪問(wèn)權(quán)。通常同一個(gè)開(kāi)發(fā)者會(huì)出于技術(shù)和非技術(shù)的原因,控制

15、類(lèi)的友元和成員函數(shù)(否則當(dāng)你想更新你的類(lèi)時(shí),還要征得其它部分的擁有者的同意)。Friend 函數(shù)名(函數(shù)聲明)。友元類(lèi)的所有成員函數(shù)都是另一個(gè)類(lèi)的友元函數(shù),都可以訪問(wèn)另一個(gè)類(lèi)中的隱藏信息(包括私有成員和保護(hù)成員)。當(dāng)希望一個(gè)類(lèi)可以存取另一個(gè)類(lèi)的私有成員時(shí),可以將該類(lèi)聲明為另一類(lèi)的友元類(lèi)。定義友元類(lèi)的語(yǔ)句格式如下:friend class 類(lèi)名(即友元類(lèi)的類(lèi)名);其中:friend和class是關(guān)鍵字,類(lèi)名必須是程序中的一個(gè)已定義過(guò)的類(lèi)。22、有哪些訪問(wèn)控制?在訪問(wèn)控制修飾符的修飾下,當(dāng)前類(lèi)中的名字在水平模塊中的訪問(wèn)規(guī)則是什么?訪問(wèn)權(quán)限:public,protected,private訪問(wèn)規(guī)則:

16、1、水平模塊部分能訪問(wèn)當(dāng)前類(lèi)、當(dāng)前類(lèi)的直接派生類(lèi)以及當(dāng)前類(lèi)的間接派生類(lèi)中由public訪問(wèn)控制修飾符修飾的共有成員。2、水平模塊部分能訪問(wèn)當(dāng)前類(lèi)的直接派生類(lèi)和當(dāng)前類(lèi)的間接派生類(lèi)中由公有繼承所得到的基類(lèi)子對(duì)象中的公有成員。3、對(duì)于當(dāng)前類(lèi)、當(dāng)前類(lèi)的直接派生類(lèi)以及當(dāng)前類(lèi)的間接派生類(lèi)中由公有繼承所得到的基類(lèi)子對(duì)象中保護(hù)成員和私有成員,在水平模塊部分不能對(duì)它們?cè)L問(wèn)。23什么是作用域?有哪些類(lèi)型?作用域是指標(biāo)示符的作用范圍或有效范圍。對(duì)象的作用域包括:1、函數(shù)原型的作用域,指函數(shù)原型中標(biāo)示符形參的作用范圍,其作用域始于函數(shù)原型聲明的左括號(hào)“(”,結(jié)束于函數(shù)原型聲明的右括號(hào)“)”;2、塊作用域,指在塊聲明的

17、標(biāo)示符,其作用域自聲明處起,一直到塊結(jié)束為止;3、類(lèi)作用域,指類(lèi)聲明中一對(duì)花括號(hào)所形成的作用范圍,簡(jiǎn)稱(chēng)類(lèi)域。4、文件作用域,不在前述各個(gè)作用域中出現(xiàn)的聲明,具有文件作用域,如文件開(kāi)頭所定義的全局標(biāo)示符就具有全局作用域。24什么是可見(jiàn)性?它的一般規(guī)則有哪些?可見(jiàn)性是從對(duì)標(biāo)示符引用的角度來(lái)談的概念,即若標(biāo)示符在某處可見(jiàn),則就可以在該處引用該標(biāo)示符,這里所說(shuō)的標(biāo)示符主要是指變量或者對(duì)象。一般規(guī)則:1、標(biāo)示符應(yīng)聲明在先,引用在后。2、在同一作用域中,不能聲明同名的標(biāo)示符。3、如果某個(gè)標(biāo)示符在外層中聲明,且在內(nèi)層中沒(méi)有同一標(biāo)示符的聲明,則該標(biāo)示符在內(nèi)層可見(jiàn)。4、對(duì)于兩個(gè)嵌套的作用域,如果在內(nèi)層作用域內(nèi)聲

18、明了與外層作用域中同名的標(biāo)示符,則外層作用域的標(biāo)示符在內(nèi)層不可見(jiàn)。25什么是常對(duì)象、常引用、常指針、指向常量的指針?常對(duì)象:指常量對(duì)象,其必須進(jìn)行初始化,且不能被更新,類(lèi)名 const 或者const 。常引用:使用const修飾符說(shuō)明的引用,const &。常指針:指帶常量的指針,因const位置不同,含義也不同。Char * const ptr1 = stringptr1; ptr1指向常量。const Char * ptr2 = stringptr2; ptr2指向字符串。26. 什么是常數(shù)據(jù)成員、常成員函數(shù)?如何使用它們?常數(shù)據(jù)成員:使用const說(shuō)明的數(shù)據(jù)成員,其只能通過(guò)成員初始化列

19、表的方式來(lái)生成構(gòu)造函數(shù)以便對(duì)數(shù)據(jù)成員作初始化。常成員函數(shù):使用const說(shuō)明的成員函數(shù),()const;27. 什么是靜態(tài)數(shù)據(jù)成員、靜態(tài)成員函數(shù)?它們有什么特點(diǎn)?靜態(tài)數(shù)據(jù)成員:使用static關(guān)鍵字定義的數(shù)據(jù)成員被稱(chēng)為靜態(tài)數(shù)據(jù)成員, 靜態(tài)數(shù)據(jù)成員所屬類(lèi)的所有實(shí)例都共享相同的靜態(tài)成員值。靜態(tài)成員函數(shù):使用static關(guān)鍵字定義的成員函數(shù)被稱(chēng)為靜態(tài)成員函數(shù),其有如下特點(diǎn):1、靜態(tài)成員函數(shù)也屬于整個(gè)類(lèi)。無(wú)論定義多少類(lèi)的對(duì)象,它只有一個(gè)拷貝;2、靜態(tài)成員函數(shù)也是用static來(lái)聲明的;3、在程序中可以使用類(lèi)名或?qū)ο竺麃?lái)調(diào)用靜態(tài)成員函數(shù),而一般的成員函數(shù)則只能通過(guò)對(duì)象名來(lái)調(diào)用;4、靜態(tài)成員函數(shù)只能訪問(wèn)屬

20、于該類(lèi)的靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù),而不能訪問(wèn)其他成員。28. 什么是類(lèi)的友元?類(lèi)的友元有哪兩種?當(dāng)一個(gè)類(lèi)為另一個(gè)類(lèi)的友元時(shí),該類(lèi)的所有成員都能訪問(wèn)對(duì)方類(lèi)的私有、保護(hù)成員。friend class 類(lèi)名(即友元類(lèi)的類(lèi)名);其中:friend和class是關(guān)鍵字,類(lèi)名必須是程序中的一個(gè)已定義過(guò)的類(lèi)。類(lèi)的友元有哪兩種?:友元函數(shù)和友元類(lèi)。29.掌握包含命令(#include)、宏定義命令(#define)、條件編譯命令(#if)的基本用法。包含命令(#include):頭文件通過(guò) include 預(yù)處理器指示符(preprocessor include directive) 而成為我們程序的一部分

21、。預(yù)處理器發(fā)現(xiàn) #include 指令后,就會(huì)尋找后跟的文件名并把這個(gè)文件的內(nèi)容包含到當(dāng)前文件中。被包含文件中的文本將替換源代碼文件中的#include 指令, 就像你把被包含文件中的全部?jī)?nèi)容鍵入到源文件中的這個(gè)位置一樣。文件包含的兩種格式、“”區(qū)別在于:文件名用括起來(lái),表示嵌入由C+系統(tǒng)提供的存放標(biāo)準(zhǔn)庫(kù)路徑中的頭文件,這種方式是標(biāo)準(zhǔn)方式;將文件名用雙引號(hào)“”括起來(lái),表示首先查找用戶(hù)自定義工作路徑中的頭文件,若找不到,再按標(biāo)準(zhǔn)方式進(jìn)行查找。宏定義命令(#define):#define是C+語(yǔ)言中提供的宏定義命令,其主要目的是為程序員在編程時(shí)提供一定的方便,并能在一定程度上提高程序的運(yùn)行效率。該

22、命令有兩種格式:一種是簡(jiǎn)單的宏定義,另一種是帶參數(shù)的宏定義。(1)簡(jiǎn)單的宏定義:#define例:#definePI3.1415926(2)帶參數(shù)的宏定義#define()例:#defineA(x)x條件編譯命令(#if):希望根據(jù)一定的條件編譯源文件的部分語(yǔ)句,有5種使用形式,詳見(jiàn)課本P170。30如何應(yīng)用#define定義帶有參數(shù)的宏?如max(x,y);#define max(x,y)(宏體)31、什么是對(duì)象的生存期?有哪兩種?對(duì)象在什么情況下具有靜態(tài)生存期?根據(jù)生存期的不同可以把對(duì)象分為哪三種?各具有什么特點(diǎn)?對(duì)象從產(chǎn)生到結(jié)束的這段時(shí)間就是它的生存期,在對(duì)象生存期內(nèi),對(duì)象將保持它的值,

23、直到其被更新為止。動(dòng)態(tài)生存期和靜態(tài)生存期。若對(duì)象的生存期與程序運(yùn)行期相同,則稱(chēng)該對(duì)象具有靜態(tài)生存期。1、局部對(duì)象:當(dāng)對(duì)象被聲明時(shí)調(diào)用構(gòu)造函數(shù),該對(duì)象被創(chuàng)建;當(dāng)程序退出定義該對(duì)象所在的函數(shù)體或程序塊時(shí),調(diào)用析構(gòu)函數(shù),釋放該對(duì)象。2、靜態(tài)對(duì)象:當(dāng)程序第一次執(zhí)行所聲明的靜態(tài)對(duì)象時(shí),該對(duì)象被創(chuàng)建;當(dāng)程序結(jié)束時(shí),該對(duì)象被釋放。3、全局對(duì)象:當(dāng)程序開(kāi)始時(shí),調(diào)用構(gòu)造函數(shù)創(chuàng)建該對(duì)象;當(dāng)程序結(jié)束時(shí)調(diào)用析構(gòu)函數(shù)釋放該對(duì)象。32什么是對(duì)象數(shù)組?對(duì)象數(shù)組和普通數(shù)組有什么不同?組成數(shù)組的各個(gè)元素的數(shù)據(jù)類(lèi)型都是對(duì)象。1、 組成元素不同。2、 初始化不同,基本類(lèi)型數(shù)組的初始化使用初值去初始化變量,對(duì)象數(shù)組的初始化則是用初值

24、去構(gòu)造對(duì)象的初始狀態(tài),需要調(diào)用類(lèi)中的相應(yīng)構(gòu)造函數(shù)來(lái)完成。3、 存儲(chǔ)結(jié)構(gòu)不同。33簡(jiǎn)述操作符重載的必要性將已經(jīng)定義的、有一定功能的操作符進(jìn)行重新定義,來(lái)完成更為細(xì)致具體的運(yùn)算等功能,便于外部調(diào)用而無(wú)需知曉?xún)?nèi)部具體運(yùn)算過(guò)程。34掌握+、-等算術(shù)運(yùn)算符、賦值操作符=、下標(biāo)操作符、類(lèi)成員訪問(wèn)操作符-、增量+/減量-操作符等的重載基本形式:返回類(lèi)型 operator 操作符(參數(shù)列表)。操作符重載函數(shù)是一個(gè)函數(shù),只不過(guò)這個(gè)函數(shù)的函數(shù)名為operator再加上后面要重載的操作符而已,比如要重載+號(hào),則:hyong operator +(hyong m)這就聲明了一個(gè)返回類(lèi)型為hyong的操作符函數(shù),其函數(shù)

25、名為operator +調(diào)用方式1、調(diào)用類(lèi)中的操作符重載函數(shù)的方法:當(dāng)調(diào)用類(lèi)中定義的操作符重載函數(shù)時(shí)最左邊的對(duì)象是調(diào)用操作符重載函數(shù)的對(duì)象。比如在類(lèi)hyong中重定義的+操作符 hyong operator +(hyong m),有類(lèi)hyong的對(duì)象m和n則調(diào)用操作符重載函數(shù)的方法有m+n和m.operator +(n),前一條語(yǔ)句會(huì)自動(dòng)轉(zhuǎn)換為后面這條語(yǔ)句,且m+n的表達(dá)式中最左邊的對(duì)象是調(diào)用操作符重載函數(shù)的對(duì)象,而最右邊的那個(gè)將被作為參數(shù)傳送。也就是說(shuō)n+m會(huì)轉(zhuǎn)換成n.operator +(m)。要記住當(dāng)調(diào)用類(lèi)中定義的操作符重載函數(shù)時(shí)最左邊的對(duì)象是調(diào)用操作符重載函數(shù)的對(duì)象。2、調(diào)用友元或獨(dú)立

26、的操作符重載函數(shù)的方法:當(dāng)調(diào)用類(lèi)的友元操作符重載函數(shù)或獨(dú)立的操作符函數(shù)時(shí)語(yǔ)句m+n會(huì)轉(zhuǎn)換為顯示的調(diào)用方式,比如有友元或獨(dú)立操作符重載函數(shù)hyong operator +(hyong a,hyong b)則當(dāng)出現(xiàn)m+n時(shí)會(huì)轉(zhuǎn)換成語(yǔ)句operator +(m,n)表達(dá)式的第一個(gè)對(duì)象傳給第一個(gè)參數(shù),第二個(gè)對(duì)象傳給第二個(gè)參數(shù)。35區(qū)分指針數(shù)組、數(shù)組指針、指針函數(shù)、函數(shù)指針的概念,對(duì)一下聲明能正確解釋其含義:(1) int (*p1)3;(2)Location *P25;( 3)Point (*Fp)(int ,int);(4)Location *Pf(Location A);(5)Location (

27、*Fp_ary2)(char *,int *);(1) int (*p1)3 數(shù)組指針,表示:指向數(shù)組p1的指針,元素表示:(*p1)i;(2)Location *P25 指針函數(shù) ( 3)Point (*Fp)(int ,int) 函數(shù)指針(4)Location *Pf(Location A)指向類(lèi)成員的指針(5)Location (*Fp_ary2)(char *,int *) 不會(huì)36為什么說(shuō)void*類(lèi)型的指針是準(zhǔn)通用型指針?一個(gè)指向任何對(duì)象 類(lèi)型的指針都可以賦值給類(lèi)型為void* 的變量,void* 可以賦值給另一個(gè)void* ,兩個(gè)void* 可以比較相等與否,而且可以顯式地將vo

28、id* 轉(zhuǎn)換到另一個(gè)類(lèi)型。其它操作都是不安全的,因?yàn)榫幾g器并不知道實(shí)際被指的是哪種對(duì)象。因此,對(duì)void* 做其他任何操作都將引起編譯錯(cuò)誤。要使用void*,就必須顯式地將經(jīng)轉(zhuǎn)換到某個(gè)指向特定類(lèi)型的指針,因此void*指針只支持幾種有限的操作,即為準(zhǔn)通用型指針。37什么是多重指針?指針P由于占用存儲(chǔ)單元而有自己的地址,因此也可以被另外的指針PP指向。同時(shí),指針PP同樣可以被另一個(gè)指針PPP所指向。這樣就形成多種指針的概念。聲明一個(gè)T類(lèi)型的N重指針的一般形式為:T * * p;38掌握動(dòng)態(tài)存儲(chǔ)管理中的new、delete、new、delete的用法。new操作:T是數(shù)據(jù)類(lèi)型名,E是運(yùn)算表達(dá)式,一

29、般形式為:new T(E) 功能是動(dòng)態(tài)創(chuàng)建一個(gè)T類(lèi)型的對(duì)象并用初值表達(dá)式E中的初值對(duì)其進(jìn)行初始化。delete操作:delete p; 刪除P對(duì)象。new用于動(dòng)態(tài)創(chuàng)建數(shù)組類(lèi)型的對(duì)象,設(shè)T是數(shù)據(jù)類(lèi)型名,E是算數(shù)常量表達(dá)式,一般形式為newTE;delete用于清除用new動(dòng)態(tài)創(chuàng)建的數(shù)組類(lèi)型的對(duì)象,一般形式為delete表達(dá)式 或者deletep;39掌握用typedef對(duì)類(lèi)型及類(lèi)型定義表達(dá)式命名的方法。解釋 typedef char *(*p_to_fun)( char * , char *);的含義。一般形式:typedef 已有數(shù)據(jù)類(lèi)型名 標(biāo)示符表列;例如typedef unsigned i

30、nt UINT,size_t; 將UINT,size_t都定義為unsigned int類(lèi)型。typedef char *(*p_to_fun)( char * , char *);是類(lèi)型定義表達(dá)式,p_to_fun是用于命名的標(biāo)示符,char *(*)( char * , char *)則是類(lèi)型表達(dá)式,通過(guò)typedef將p_to_fun定義成為類(lèi)型表達(dá)式char *(*)( char * , char *)的名字。40String類(lèi)的聲明和實(shí)現(xiàn)。要想使用標(biāo)準(zhǔn)C+中string類(lèi),必須要包含#include / 注意是,不是,帶.h的是C語(yǔ)言中的頭文件實(shí)現(xiàn)方法詳解課本P29041、什么是th

31、is指針?一個(gè)對(duì)象的this指針并不是對(duì)象本身的一部分,不會(huì)影響sizeof(對(duì)象)的結(jié)果。this作用域是在類(lèi)內(nèi)部,當(dāng)在類(lèi)的非靜態(tài)成員函數(shù)中訪問(wèn)類(lèi)的非靜態(tài)成員的時(shí)候,編譯器會(huì)自動(dòng)將對(duì)象本身的地址作為一個(gè)隱含參數(shù)傳遞給函數(shù)。也就是說(shuō),即使你沒(méi)有寫(xiě)上this指針,編譯器在編譯的時(shí)候也是加上this的,它作為非靜態(tài)成員函數(shù)的隱含形參,對(duì)各成員的訪問(wèn)均通過(guò)this進(jìn)行。例如,調(diào)用date.SetMonth(9) SetMonth(&date, 9),this幫助完成了這一轉(zhuǎn)換。使用方法:一種情況就是,在類(lèi)的非靜態(tài)成員函數(shù)中返回類(lèi)對(duì)象本身的時(shí)候,直接使用 return *this;另外一種情況是當(dāng)參數(shù)

32、與成員變量名相同時(shí)使用this指針,如this-n = n (不能寫(xiě)成n = n)。42.什么是單繼承和多繼承?派生類(lèi)的基類(lèi)只有一個(gè),稱(chēng)為單繼承。Class 派生類(lèi)名:繼承方式 基類(lèi)名派生類(lèi)成員聲明;派生類(lèi)從多個(gè)基類(lèi)派生,稱(chēng)為多繼承。Class 派生類(lèi)名:繼承方式 基類(lèi)名1,, 繼承方式 基類(lèi)名n派生類(lèi)成員聲明;43有哪幾種繼承方式?繼承方式3種:public protected private繼承特點(diǎn):public繼承基類(lèi)的private成員不能訪問(wèn)protected成員成為派生類(lèi)的protected成員public成員成為派生類(lèi)的public成員protected繼承基類(lèi)的private成

33、員不能訪問(wèn)protected成員成為派生類(lèi)的protected成員public成員成為派生類(lèi)的protected成員private繼承基類(lèi)的private成員不能訪問(wèn)protected成員成為派生類(lèi)的private成員public成員成為派生類(lèi)的private成員44什么是基類(lèi)子對(duì)象?對(duì)基類(lèi)數(shù)據(jù)成員和成員函數(shù)的訪問(wèn)與操作要受到什么的約束?基類(lèi)子對(duì)象:基類(lèi)中的某個(gè)數(shù)據(jù)成員,該數(shù)據(jù)成員是一個(gè)類(lèi)的對(duì)象,如class Aprivate: int a;public: A();class BaseClassprivate: A a1;public BaseClass();基類(lèi)BaseClass中的數(shù)據(jù)成員

34、a1就是自對(duì)象,它本身是A類(lèi)的對(duì)象派生類(lèi)對(duì)基類(lèi)成員和成員函數(shù)的訪問(wèn)約束基類(lèi)中的訪問(wèn)控制繼承方式publicprotectedprivatepublicpublicprotected不可直接訪問(wèn)protectedprotectedprotected不可直接訪問(wèn)privateprivateprivate不可直接訪問(wèn)45掌握通過(guò)成員名限定的方式訪問(wèn)基類(lèi)成員。類(lèi)中一個(gè)成員名字可以使用類(lèi)名和作用域運(yùn)算符來(lái)顯式限定,稱(chēng)為成員名限定,如:void C:set(int val) C:value=val; return; 訪問(wèn)方法見(jiàn)課本P31346了解繼承方式下的訪問(wèn)控制機(jī)制見(jiàn)43題47派生類(lèi)中的數(shù)據(jù)結(jié)構(gòu)一般有

35、哪三種成分?這三類(lèi)成員如何進(jìn)行初始化?派生類(lèi)的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)與析構(gòu)函數(shù)。派生類(lèi)構(gòu)造函數(shù)在類(lèi)中聲明的一般形式:派生類(lèi)名(參數(shù)表0);派生類(lèi)構(gòu)造函數(shù)定義的一般形式:派生類(lèi)名:派生類(lèi)名(參數(shù)表0):成員初始化列表/函數(shù)體。當(dāng)沒(méi)有在成員初始化列表中列出對(duì)新增的非類(lèi)類(lèi)型的數(shù)據(jù)成員進(jìn)行/初始化時(shí),可以在函數(shù)體中對(duì)其進(jìn)行初始化派生類(lèi)析構(gòu)函數(shù)定義的一般形式:派生類(lèi)名:派生名()/析構(gòu)函數(shù)的函數(shù)體派生類(lèi)拷貝構(gòu)造函數(shù)在類(lèi)中聲明的一般形式:派生類(lèi)名(派生類(lèi)名&r)其中,r是引用對(duì)象名。派生類(lèi)拷貝構(gòu)造函數(shù)定義的一般形式:派生類(lèi)名:派生類(lèi)名(派生類(lèi)名&r):成員初始化列表/函數(shù)體48什么是繼承中的二義性?有哪些

36、解決二義性的辦法?訪問(wèn)控制能否解決二義性?為什么?繼承使得基類(lèi)和派生類(lèi)中可能出現(xiàn)同名標(biāo)示符。如果沒(méi)有一種機(jī)制來(lái)處理同名標(biāo)示符的識(shí)別與束定(或綁定),則在一個(gè)表達(dá)式中就有可能訪問(wèn)一個(gè)以上的成員,從而產(chǎn)生二義乃至多義。1、用成員名限定的方法解決二義性問(wèn)題2、用支配規(guī)則解決二義性問(wèn)題控制訪問(wèn)檢查不能解決二義性問(wèn)題,因?yàn)槎x性檢查是在訪問(wèn)控制檢查之前進(jìn)行。49什么是虛基類(lèi)?它能解決什么問(wèn)題?當(dāng)在多條繼承路徑上有一個(gè)公共的基類(lèi),在這些路徑中的某幾條匯合處,這個(gè)公共的基類(lèi)就會(huì)產(chǎn)生多個(gè)實(shí)例(或多個(gè)副本),若只想保存這個(gè)基類(lèi)的一個(gè)實(shí)例,可以將這個(gè)公共基類(lèi)說(shuō)明為虛基類(lèi)。虛基類(lèi)的基本原則是在內(nèi)存中只有基類(lèi)成員的一

37、份拷貝。這樣,通過(guò)把基類(lèi)繼承聲明為虛擬的,就只能繼承基類(lèi)的一份拷貝,從而消除歧義。用virtual限定符把基類(lèi)繼承說(shuō)明為虛擬的。50什么叫多態(tài)?什么是重載多態(tài)、類(lèi)型多態(tài)、包含多態(tài)?多態(tài)性是指一種消息被不同類(lèi)型的對(duì)象接收時(shí)會(huì)導(dǎo)致不同行為的實(shí)現(xiàn)。重載多態(tài)即靜態(tài)聯(lián)編,靜態(tài)聯(lián)編是指聯(lián)編工作在編譯階段完成的,這種聯(lián)編過(guò)程是在程序運(yùn)行之前完成的,又稱(chēng)為早期聯(lián)編。要實(shí)現(xiàn)靜態(tài)聯(lián)編,在編譯階段就必須確定程序中的操作調(diào)用(如函數(shù)調(diào)用)與執(zhí)行該操作代碼間的關(guān)系,確定這種關(guān)系稱(chēng)為束定,在編譯時(shí)的束定稱(chēng)為靜態(tài)束定。靜態(tài)聯(lián)編對(duì)函數(shù)的選擇是基于指向?qū)ο蟮闹羔樆蛘咭玫念?lèi)型。其優(yōu)點(diǎn)是效率高,但靈活性差。類(lèi)型多態(tài)即動(dòng)態(tài)聯(lián)編,動(dòng)

38、態(tài)聯(lián)編是指聯(lián)編在程序運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行,根據(jù)當(dāng)時(shí)的情況來(lái)確定調(diào)用哪個(gè)同名函數(shù),實(shí)際上是在運(yùn)行時(shí)虛函數(shù)的實(shí)現(xiàn)。這種聯(lián)編又稱(chēng)為晚期聯(lián)編,或動(dòng)態(tài)束定。動(dòng)態(tài)聯(lián)編對(duì)成員函數(shù)的選擇是基于對(duì)象的類(lèi)型,針對(duì)不同的對(duì)象類(lèi)型將做出不同的編譯結(jié)果。C+中一般情況下的聯(lián)編是靜態(tài)聯(lián)編,但是當(dāng)涉及到多態(tài)性和虛函數(shù)時(shí)應(yīng)該使用動(dòng)態(tài)聯(lián)編。動(dòng)態(tài)聯(lián)編的優(yōu)點(diǎn)是靈活性強(qiáng),但效率低。包含多態(tài):在繼承情況下,同一標(biāo)示符可以為基類(lèi)和派生類(lèi)的成員函數(shù)命名。 51什么是子類(lèi)型?它能實(shí)現(xiàn)什么類(lèi)型的多態(tài)?什么是多態(tài)程序?子類(lèi)型:一個(gè)標(biāo)示符對(duì)應(yīng)內(nèi)存中多個(gè)由該標(biāo)示符標(biāo)示的存儲(chǔ)。當(dāng)函數(shù)的參數(shù)構(gòu)成子類(lèi)型時(shí),表現(xiàn)出的多態(tài)性成為參數(shù)多態(tài)。如果一個(gè)原本處理類(lèi)型X對(duì)

39、象,指針或引用的程序,現(xiàn)在能夠處理U類(lèi)型對(duì)象、指針或引用,則稱(chēng)該程序?yàn)槎鄳B(tài)程序。52什么是類(lèi)型強(qiáng)制?它的作用是什么?為什么說(shuō)構(gòu)造函數(shù)起到類(lèi)型強(qiáng)制的作用?什么是類(lèi)型強(qiáng)制轉(zhuǎn)換成員函數(shù)?1、將一種類(lèi)型的值強(qiáng)制轉(zhuǎn)換成為另一種類(lèi)型的值成為類(lèi)型強(qiáng)制。2、當(dāng)操作數(shù)的類(lèi)型不同,而且不屬于基本數(shù)據(jù)類(lèi)型時(shí),經(jīng)常需要強(qiáng)制類(lèi)型轉(zhuǎn)換,將操作數(shù)轉(zhuǎn)化為所需要的類(lèi)型。3、當(dāng)函數(shù)的形參為類(lèi)類(lèi)型且實(shí)參與形參類(lèi)型不一致的時(shí)候,系統(tǒng)將調(diào)用構(gòu)造函數(shù)將實(shí)參的類(lèi)型向形參的類(lèi)類(lèi)型轉(zhuǎn)換,自動(dòng)完成類(lèi)型強(qiáng)制。4、類(lèi)X中將X類(lèi)型強(qiáng)制轉(zhuǎn)換為指定類(lèi)型的轉(zhuǎn)換函數(shù)。53什么是虛函數(shù)?虛函數(shù)的作用是什么?什么是動(dòng)態(tài)束定和靜態(tài)束定?1、在某基類(lèi)中聲明為 vir

40、tual 并在一個(gè)或多個(gè)派生類(lèi)中被重新定義的成員函數(shù) 2、虛函數(shù)的作用,即實(shí)現(xiàn)多態(tài)性。3、見(jiàn)50題。54什么是純虛函數(shù)和抽象類(lèi)?純虛函數(shù)是一種特殊的虛函數(shù),它的一般格式如下:class virtual ()=0;在許多情況下,在基類(lèi)中不能對(duì)虛函數(shù)給出有意義的實(shí)現(xiàn),而把它聲明為純虛函數(shù),它的實(shí)現(xiàn)留給該基類(lèi)的派生類(lèi)去做。這就是純虛函數(shù)的作用。凡是含有純虛函數(shù)的類(lèi)叫做抽象類(lèi)。這種類(lèi)不能聲明對(duì)象,只是作為基類(lèi)為派生類(lèi)服務(wù)。除非在派生類(lèi)中完全實(shí)現(xiàn)基類(lèi)中所有的的純虛函數(shù),否則,派生類(lèi)也變成了抽象類(lèi),不能實(shí)例化對(duì)象。55虛析構(gòu)函數(shù)的作用是什么?試舉例說(shuō)明。虛析構(gòu)函數(shù)是為了解決這樣的一個(gè)問(wèn)題:基類(lèi)的指針指向派

41、生類(lèi)對(duì)象,并用基類(lèi)的指針刪除派生類(lèi)對(duì)象。如果某個(gè)類(lèi)不包含虛函數(shù),那一般是表示它將不作為一個(gè)基類(lèi)來(lái)使用。當(dāng)一個(gè)類(lèi)不準(zhǔn)備作為基類(lèi)使用時(shí),使析構(gòu)函數(shù)為虛一般是個(gè)壞主意。因?yàn)樗鼤?huì)為類(lèi)增加一個(gè)虛函數(shù)表,使得對(duì)象的體積翻倍,還有可能降低其可移植性。所以基本的一條是:無(wú)故的聲明虛析構(gòu)函數(shù)和永遠(yuǎn)不去聲明一樣是錯(cuò)誤的。實(shí)際上,很多人這樣總結(jié):當(dāng)且僅當(dāng)類(lèi)里包含至少一個(gè)虛函數(shù)的時(shí)候才去聲明虛析構(gòu)函數(shù)。抽象類(lèi)是準(zhǔn)備被用做基類(lèi)的,基類(lèi)必須要有一個(gè)虛析構(gòu)函數(shù),純虛函數(shù)會(huì)產(chǎn)生抽象類(lèi),所以方法很簡(jiǎn)單:在想要成為抽象類(lèi)的類(lèi)里聲明一個(gè)純虛析構(gòu)函數(shù)。例子:class awov / awov = abstract w/o/ virt

42、ualspublic:virtual awov() = 0; / 聲明一個(gè)純虛析構(gòu)函數(shù);這個(gè)類(lèi)有一個(gè)純虛函數(shù),所以它是抽象的,而且它有一個(gè)虛析構(gòu)函數(shù),所以不會(huì)產(chǎn)生析構(gòu)函數(shù)問(wèn)題。但這里還有一件事:必須提供純虛析構(gòu)函數(shù)的定義:awov:awov() / 純虛析構(gòu)函數(shù)的定義這個(gè)定義是必需的,因?yàn)樘撐鰳?gòu)函數(shù)工作的方式是:最底層的派生類(lèi)的析構(gòu)函數(shù)最先被調(diào)用,然后各個(gè)基類(lèi)的析構(gòu)函數(shù)被調(diào)用。這就是說(shuō),即使是抽象類(lèi),編譯器也要產(chǎn)生對(duì)awov的調(diào)用,所以要保證為它提供函數(shù)體。如果不這么做,鏈接器就會(huì)檢測(cè)出來(lái),最后還是得回去把它添上。注意:如果聲明虛析構(gòu)函數(shù)為inline,將會(huì)避免調(diào)用它們時(shí)產(chǎn)生的開(kāi)銷(xiāo),但編譯器還

43、是必然會(huì)在什么地方產(chǎn)生一個(gè)此函數(shù)的拷貝。56什么叫模板?分成哪兩類(lèi)?能夠定義簡(jiǎn)單的函數(shù)模板和類(lèi)模板。1、C+中用來(lái)代替一組相關(guān)函數(shù)或一組相關(guān)類(lèi)的一段程序代碼2、代替一組相關(guān)函數(shù)的代碼稱(chēng)為函數(shù)模板,而代替一組相關(guān)類(lèi)的代碼稱(chēng)為類(lèi)模板。函數(shù)模板定義了一組函數(shù)template T *TestFun(T* src) return (+src); 使用時(shí)實(shí)例化模板函數(shù)int m10;int *p = TestFun(m);類(lèi)模板定義了一組類(lèi)template class TestClasspublic: T *TestFunc(T* src);使用時(shí)先實(shí)例化類(lèi)模板char ch10;TestClass a;

44、char *p = a.TestFunc(ch);57C+中提供哪三條語(yǔ)句實(shí)現(xiàn)異常處理?簡(jiǎn)述C+的異常處理機(jī)制。Try、catch、throw課本P404寫(xiě)出下列程序的運(yùn)行結(jié)果: #include void swap(int& m, int& n)int temp = m;m=3+n;n= 6*temp;main()int a = 2, b = 1;for(int i=0;i3;i+)swap(a, b);couta=a b=bendl;return 0;2、設(shè)有一個(gè)Line類(lèi)及fun函數(shù)定義如下:(例5.8)struct Line Line(); Line(int xx1,int yy1,i

45、nt xx2,int yy2); Line(Line& p); Line(); void set_x1(int xx1); private: int x1,y1,x2,y2;Line:Line()x1=y1=x2=y2=0;coutdefault constructor is called! x1=x1endl;Line:Line(int xx1,int yy1,int xx2,int yy2)x1=xx1;y1=yy1;x2=xx2;y2=yy2;coutconstructor is called! x1=x1endl;Line:Line(Line& p) /拷貝構(gòu)造函數(shù)x1=p.x1;y1

46、=p.y1;x2=p.x2;y2=p.y2;coutcopy constructor is called! x1=x1endl;Line:Line()coutdestructor is called! x1=x1endl;void Line:set_x1(int xx1)x1=xx1;coutNow, x1 is x1endl;Line fun(Line obj) /與類(lèi)平行的函數(shù)Line t(obj);t.set_x1(100);return t;void main(void)Line L1(1,1,50,50); /常規(guī)有參構(gòu)造函數(shù)Line L2; /常規(guī)缺省構(gòu)造函數(shù)L2=fun(L1);

47、 /這里發(fā)生了什么?coutexiting .endl;請(qǐng)寫(xiě)出程序運(yùn)行結(jié)果并解釋輸出各行信息的原因。constructor is called! x1=1 / Line L1(1,1,50,50); default constructor is called! x1=0 / Line L2; copy constructor is called! x1=1 /fun(L1)參數(shù)傳遞copy constructor is called! x1=1 / Line t(obj);Now, x1 is 100copy constructor is called! x1=100 / return t;d

48、estructor is called! x1=100destructor is called! x1=100destructor is called! x1=1exiting .destructor is called! x1=100destructor is called! x1=1寫(xiě)出下列程序的運(yùn)行結(jié)果,并分析輸出信息的原因。#include stdafx.h#include #include class Point/Point類(lèi)定義public:Point(int xx, int yy=0) X=xx;Y=yy;coutPoint構(gòu)造函數(shù)被調(diào)用endl; Point() X=8;Y=6

49、;coutPoint無(wú)參數(shù)構(gòu)造函數(shù)被調(diào)用endl;Point(Point &p);int GetX() return X;int GetY() return Y;private:int X,Y;Point:Point(Point &p)/拷貝構(gòu)造函數(shù)的實(shí)現(xiàn)X=p.X;Y=p.Y;coutPoint拷貝構(gòu)造函數(shù)被調(diào)用endl;class Distance/Distance類(lèi)的定義public:/外部接口Distance(Point xp1, Point xp2);double GetDis()return dist;private:/私有數(shù)據(jù)成員Point p1,p2;/Point類(lèi)的對(duì)象p1,p2double dist;Distance:Distance(P

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論