完整word版,c++經(jīng)典面試題_第1頁
完整word版,c++經(jīng)典面試題_第2頁
完整word版,c++經(jīng)典面試題_第3頁
完整word版,c++經(jīng)典面試題_第4頁
完整word版,c++經(jīng)典面試題_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

.C和C++中struct有什么區(qū)別?C語言中:Struct是用戶自定義數(shù)據(jù)類型(UDT)C++語言中:Struct是抽象數(shù)據(jù)類型(ADT),支持成員函數(shù)的定義。在C++中,struc的成員的默認(rèn)訪問說明符為publicclass為privatec中的struct是沒有權(quán)限設(shè)置的。C++中struc增加了訪問權(quán)限,且可以和類一樣有成員函數(shù)。C++中的struct等同于class只是class默認(rèn)成員權(quán)限是private而struct默認(rèn)成員權(quán)限是public1>C++中的struct類似于class,有變量,有構(gòu)造函數(shù)、虛函數(shù)等,有繼承,多態(tài)等類的特征;2>2>C中的struct只有變量,不能有函數(shù),但是可以有函數(shù)指針2.C++中的struct和class有什么區(qū)別?在C++中,兩者區(qū)別不大,但是有2個主要的區(qū)別1>.繼承權(quán)限:struct默認(rèn)是public繼承;class默認(rèn)是private繼承2>.訪問權(quán)限:struct默認(rèn)是public訪問;class默認(rèn)是private訪問如何判斷一段程序是由C編譯程序還是由C++編譯程序編譯的?【標(biāo)準(zhǔn)答案】#ifdef__cpluspluscout<<“c++";#elsecout<<"c";#endif(這個以前還真沒注意過,漲姿勢了。。。)C和C++有什么不同?【參考答案】從機制上:c是面向過程的(但c也可以編寫面向?qū)ο蟮某绦颍?;C++是面向?qū)ο蟮?,提供了類。但是,C++編寫面向?qū)ο蟮某绦虮萩容易。從適用的方向:C適合要求代碼體積小的,效率高的場合,如嵌入式C++適合更上層的,復(fù)雜的;linux核心大部分是c寫的,因為它是系統(tǒng)軟件,效率要求極高。從名稱上也可以看出,C++比c多了+,說明C++是c的超集;那為什么不叫c+而叫C++呢,是因為C++比c來說擴充的東西太多了,所以就在C后面放上兩個+;于是就成了C++。C語言是結(jié)構(gòu)化編程語言,C++是面向?qū)ο缶幊陶Z言。C++側(cè)重于對象而不是過程,側(cè)重于類的設(shè)計而不是邏輯的設(shè)計。關(guān)于這個問題,個人覺得《EffectiveC++》上面第一條說的很好,ViewC++asafederationoflanguages.把C++當(dāng)做一個語言聯(lián)邦。C++由四部分組成1>c語言部分;2>面向?qū)ο蟛糠?,包括封裝、繼承、多態(tài)這些C語言所沒有的特性;3>泛型編程部分,大多數(shù)類、函數(shù)要考慮到把它設(shè)計成模板,方便復(fù)用;4>STL庫,里面封裝了大量的優(yōu)秀模板,是3>中內(nèi)容的集成,學(xué)會使用它們可以讓代碼更高效。當(dāng)然,最好去深入了解STL源碼,那樣會對C++有更深的理解。5.“引用”與指針的區(qū)別是什么?【參考答案】指針通過某個指針變量指向一個對象后,對它所指向的變量間接操作。程序中使用指針,程序的可讀性差;而引用本身就是目標(biāo)變量的別名,對引用的操作就是對目標(biāo)變量的操作。在另一本C++著作《MoreEffectiveC++》里,第一條就是論述point和reference的區(qū)別總結(jié)一下,1>指針是一個存儲地址的變量,而引用是一個變量的別名。所以在一個函數(shù)中,傳引用要比傳指針?biāo)俣雀臁?>指針可以指向一個空值,而引用必須初始化。指針可以如下形式出現(xiàn)[cpp]viewplaincopyint*p;是合法但不合理的(相當(dāng)于是一個野指針)??梢月暶饕粋€指向空值的指針[cpp]*p=null而引用不行[cpp]&r;是錯誤的引用必須初始化為一個變量的別名,如[cpp]viewplaincopyinta=5;int&r=a;3>也是因為2>的特性,指針在使用前要判斷是否為空,而引用必定不為空(否則會報錯),所以不用判斷。4>指針可以更改指向的內(nèi)存地址,而引用是和變量綁定的,不可更改。5>在運算符重載過程中,通常返回一個引用往往比返回一個指針更好,使用指針易引起語義上的歧義。6.classA{virtualvoidfunc1();voidfunc2();};classB:classA{voidfunc1(){cout<<"fun1inclassB"<<endl;virtualvoidfunc2(){cout<<"fun2inclassB"<<endl;}A中的funci和B中的func2都是虛函數(shù)A中的funci和B中的func2都不是虛函數(shù).A中的func2是虛函數(shù).,B中的funci不是虛函數(shù).A中的func2不是虛函數(shù),B中的funci是虛函數(shù).【標(biāo)準(zhǔn)答案】A水題。。7.intid[sizeof(unsignedlong)];這個對嗎?為什么?【標(biāo)準(zhǔn)答案】正確這個sizeof是編譯時運算符,編譯時就確定了可以看成和機器有關(guān)的常量。某文件中定義的靜態(tài)全局變量(或稱靜態(tài)外部變量)其作用域是()?A.只限某個函數(shù)B.本文件C.跨文件D.不限制作用域【參考答案】B。靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯誤。在《C和指針》上看過,static關(guān)鍵字會改變具有外部鏈接性的變量和函數(shù)C++函數(shù)中值的傳遞方式有哪幾種?【標(biāo)準(zhǔn)答案】C++函數(shù)的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞。(指針傳遞就是通常說的地址傳遞)對于一個頻繁使用的短小函數(shù),在C語言中應(yīng)用什么實現(xiàn),在C++中應(yīng)用什么實現(xiàn)?【標(biāo)準(zhǔn)答案】c用宏定義,c++用inlinedefine實現(xiàn)的函數(shù)功能容易出bug,所以在c++中最好不要使用引用與指針有什么區(qū)別?【參考答案】1)引用必須被初始化,指針不必。2)引用初始化以后不能被改變,指針可以改變所指的對象。3)不存在指向空值的引用,但是存在指向空值的指針??梢詤⒖枷略?題中補充的內(nèi)容C++中virtual與inline的含義分別是什么?【參考答案】在基類成員函數(shù)的聲明前加上virtual關(guān)鍵字,意味著將該成員函數(shù)聲明為虛函數(shù)。inline與函數(shù)的定義體放在一起,使該函數(shù)稱為內(nèi)聯(lián)。inline是一種用于實現(xiàn)的關(guān)鍵字,而不是用于聲明的關(guān)鍵字。虛函數(shù)的特點;如果希望派生類能夠重新定義基類的方法,則在基類中將該方法定義為虛方法,這樣可以啟用動態(tài)聯(lián)編。內(nèi)聯(lián)函數(shù)的特點;使用內(nèi)聯(lián)函數(shù)的目的是為了提高函數(shù)的運行效率。內(nèi)聯(lián)函數(shù)體的代碼不能過長,因為內(nèi)聯(lián)函數(shù)省去調(diào)用函數(shù)的時間是以代碼膨脹為代價的。內(nèi)聯(lián)函數(shù)不能包含循環(huán)語句,因為執(zhí)行循環(huán)語句要比調(diào)用函數(shù)的開銷大。哈!我想我確實要注意一下表達(dá)能力。。13.VC中,編譯工具條內(nèi)的Debug與Release選項是什么含義?【參考答案】Debug通常稱為調(diào)試版本,它包含調(diào)試信息,并且不作任何優(yōu)化,便于程序員調(diào)試程序。Release稱為發(fā)布版本,它往往是進(jìn)行了各種優(yōu)化,使得程序在代碼大小和運行速度上都是最優(yōu)的,以便用戶很好地使用。Debug帶有大量的調(diào)試代碼,運行時需要相應(yīng)的運行庫,發(fā)布模式程序緊湊不含有調(diào)試代碼和信息,直接可以運行(如果不需要運行庫)函數(shù)assert的用法?【參考答案】斷言assert是僅在debug版本起作用的宏,用于檢查"不應(yīng)該“發(fā)生的情況。程序員可以把assert看成一個在任何系統(tǒng)狀態(tài)下都可以安全使用的無害測試手段學(xué)VC++的時候見過assert宏定義,但是自己從來沒用過。。const與#define的比較,const有什么優(yōu)點?【參考答案】(1)const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可以對前者進(jìn)行類型安全檢查。而對后者只進(jìn)行字符替換,沒有類型安全檢查,并且在字符替換可能會產(chǎn)生意料不到的錯誤(邊際效應(yīng))。#define不能生成類的專屬常量,因為它只是進(jìn)行簡單的替換。(2)有些集成化的調(diào)試工具可以對const常量進(jìn)行調(diào)試,但是不能對宏常量進(jìn)行調(diào)試?!禘ffectiveC++》中建議以const、enum、inline代替#define。使用enum的原因有些情況下,編譯器不允許靜態(tài)常量出現(xiàn)在類的初始設(shè)定中,只得以enum的形式另一方面,enum和#門6仙6更相似,它們都沒有具體的類型,比如,有constinta;卻沒有#defineNinta,enum和#define都不能夠被去地址,而const可以。請你談?wù)勔煤椭羔樀膮^(qū)別?!緟⒖即鸢浮浚?)引用被創(chuàng)建的同時必須被初始化(指針則可以在任何時候被初始化)。(2)不能有NULL引用,引用必須與合法的存儲單元關(guān)聯(lián)(指針則可以是NULL)。(3)一旦引用被初始化,就不能改變引用的關(guān)系(指針則可以隨時改變所指的對象)。不斷地出現(xiàn),可見這個問題是經(jīng)常容易被問到的。17.有了malloc/free為什么還要new/delete?【參考答案】malloc與free是C++/C語言的標(biāo)準(zhǔn)庫函數(shù),new/delete是C++的運算符。它們都可用于申請動態(tài)內(nèi)存和釋放內(nèi)存。對于非內(nèi)部數(shù)據(jù)類型的對象而言,光用malloc/free無法滿足動態(tài)對象的要求。對象在創(chuàng)建的同時要自動執(zhí)行構(gòu)造函數(shù),對象在消亡之前要自動執(zhí)行析構(gòu)函數(shù)。由于malloc/free是庫函數(shù)而不是運算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強加于malloc/free。因此C++語言需要一個能完成動態(tài)內(nèi)存分配和初始化工作的運算符new,以及一個能完成清理與釋放內(nèi)存工作的運算符delete。注意new/delete不是庫函數(shù)。以前只是習(xí)慣在用C時用malloc/free,用C++時用new/delete,沒注意到這些差異性。如果在申請動態(tài)內(nèi)存時找不到足夠大的內(nèi)存塊,malloc和new將返回NULL指針,宣告內(nèi)存申請失敗。你是怎么處理內(nèi)存耗盡的?【參考答案】判斷指針是否為NULL,如果是則馬上用return語句終止本函數(shù)。⑵判斷指針是否為NULL,如果是則馬上用exit(1)終止整個程序的運行為new和malloc設(shè)置異常處理函數(shù)。例如VisualC++可以用_set_new_hander函數(shù)為new設(shè)置用戶自己定義的異常處理函數(shù),也可以讓malloc享用與new相同的異常處理函數(shù)。我一般是直接return了C++是不是類型安全的?【參考答案】不是。兩個不同類型的指針之間可以強制轉(zhuǎn)換(用reinterpretcast)。const符號常量;(1)constchar*pcharconst*p(3)char*constp說明上面三種描述的區(qū)別;【參考答案】⑴p是一個指向constchar的指針,p是可以改變指向的,但是p指向的值是不能改變的;p指向的恰好是一個指向const的char的普通指針;p是一個指針,這個指針是指向char的const指針。(1)和(2)的定義是一樣的。1、2和3的區(qū)別在于,1和2的const出現(xiàn)在*號左邊,3出現(xiàn)在*號右邊。好像也是在《C和指針》上看到的這句話。用C++寫個程序,如何判斷一個操作系統(tǒng)是16位還是32位的?【標(biāo)準(zhǔn)答案】定義一個指針p,打印出sizeof(p),如果節(jié)果是4,則表示該操作系統(tǒng)是32位,打印結(jié)果是2,表示是16位。用C++寫個程序,如何判斷一個操作系統(tǒng)是16位還是32位的?不能用sizeof()函數(shù)。【參考答案】[cpp]viewplaincopyinta=~0;if(a>65536)TOC\o"1-5"\h\z{cout<<"32bit"<<endl;}else{cout<<"16bit"<<endl;}這個參考答案估計參考了不少年了。?!,F(xiàn)在大部分機器都32、64位的了,所以,應(yīng)該把65536改為4294967296,來判斷機器是32位||64位23.[cpp]viewplaincopyvoid*(*(*fp1)(int))[10];float(*(*fp2)(int,int,int))(int);int(*(*fp3)())[10]();分別表示什么意思?【標(biāo)準(zhǔn)答案】1.void*(*(*fp1)(int))[10];fp1是一個指針,指向一個函數(shù),這個函數(shù)的參數(shù)為int型,函數(shù)的返回值是一個指針,這個指針指向一個數(shù)組,這個數(shù)組有10個元素,每個元素是一個void*型指針。2.float(*(*fp2)(int,int,int))(int);fp2是一個指針,指向一個函數(shù),這個函數(shù)的參數(shù)為3個int型,函數(shù)的返回值是一個指針,這個指針指向一個函數(shù),這個函數(shù)的參數(shù)為int型,函數(shù)的返回值是float型。3.int(*(*fp3)())[10]();fp3是一個指針,指向一個函數(shù),這個函數(shù)的參數(shù)為空,函數(shù)的返回值是一個指針,這個指針指向一個數(shù)組,這個數(shù)組有10個元素,每個元素是一個指針,指向一個函數(shù),這個函數(shù)的參數(shù)為空,函數(shù)的返回值是int型。多態(tài)類中的虛函數(shù)表是Compile-Time,還是Run-Time時建立的?【標(biāo)準(zhǔn)答案】虛擬函數(shù)表是在編譯期就建立了,各個虛擬函數(shù)這時被組織成了一個虛擬函數(shù)的入口地址的數(shù)組.而對象的隱藏成員--虛擬函數(shù)表指針是在運行期--也就是構(gòu)造函數(shù)被調(diào)用時進(jìn)行初始化的,這是實現(xiàn)多態(tài)的關(guān)鍵。錯誤的轉(zhuǎn)義字符是()A.'\091'B.'\\'C.'\0'D.'\'‘【標(biāo)準(zhǔn)答案】AA錯誤的關(guān)鍵在于,其中出現(xiàn)了9,這樣它就不是8進(jìn)制的轉(zhuǎn)換了。若數(shù)組名作實參而指針變量作形參,函數(shù)調(diào)用實參傳給形參的是()A.數(shù)組的長度B.數(shù)組第一個元素的值C.數(shù)組所有元素的值D.數(shù)組第一個元素的地址【標(biāo)準(zhǔn)答案】D變量的指針含意是指變量的()A.值B.地址C.存儲D.名字【標(biāo)準(zhǔn)答案】B內(nèi)存的分配方式有幾種?【參考答案】一、從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在。例如全局變量。二、在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。三、從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用free或delete釋放內(nèi)存。動態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問題也最多。floata,b,c,問等式(a+b)+c==(b+a)+c和(a+b)+c==(a+c)+b能否成立?【參考答案】兩者都不行。在比較float或double時,不能簡單地比較。由于計算誤差,相等的概率很低。應(yīng)判斷兩數(shù)之差是否落在區(qū)間(-e,e)內(nèi)。這個e應(yīng)比浮點數(shù)的精度大一個數(shù)量級。我想到的是另一個運算符%。不能對float或double使用%運算符,原因和參考答案中的說法類似全局變量和局部變量有什么區(qū)別?是怎么實現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?【參考答案】1>/2>生命周期不同:全局變量隨主程序創(chuàng)建而創(chuàng)建,隨主程序銷毀而銷毀;內(nèi)存中分配在全局?jǐn)?shù)據(jù)區(qū)。局部變量在局部函數(shù)內(nèi)部,甚至局部循環(huán)體等內(nèi)部存在,退出就不存在;分配在棧區(qū)。使用方式不同:通過聲明后全局變量程序的各個部分都可以用到;局部變量只能在局部使用;3>操作系統(tǒng)和編譯器通過內(nèi)存分配的位置來知道的,全局變量分配在全局?jǐn)?shù)據(jù)段并且在程序開始運行的時候被加載。局部變量則分配在堆棧里面。另,全局變量會被初始化為0,而局部變量以隨機值進(jìn)行初始化31.Heap與stack的差別【參考答案】Heap是堆,stack是棧。Stack的空間由操作系統(tǒng)自動分配/釋放,Heap上的空間手動分配/釋放。Stack空間有限,Heap是很大的自由存儲區(qū)C中的malloc函數(shù)分配的內(nèi)存空間即在堆上,C++中對應(yīng)的是new操作符。程序在編譯期對變量和函數(shù)分配內(nèi)存都在棧上進(jìn)行,且程序運行過程中函數(shù)調(diào)用時參數(shù)的傳遞也在棧上進(jìn)行32.InC++,whatdoes"explicit"mean?whatdoes"protected"mean?【標(biāo)準(zhǔn)答案】C++中的explicit關(guān)鍵字用來修飾類的構(gòu)造函數(shù),表明該構(gòu)造函數(shù)是顯式的,在某些情況下,我們要求類的使用者必須顯示調(diào)用類的構(gòu)造函數(shù)時就需要使用explicit,反之默認(rèn)類型轉(zhuǎn)換可能會造成無法預(yù)期的問題。protected控制的是一個函數(shù)對一個類的成員(包括成員變量及成員方法)的訪問權(quán)限。protected成員只有該類的成員函數(shù)及其派生類的成員函數(shù)可以訪問。我擦!它倆為啥放在一起問。重復(fù)多次fclose一個打開過一次的FILE*fp指針會有什么結(jié)果,并請解釋?!緟⒖即鸢浮靠疾禳c:導(dǎo)致文件描述符結(jié)構(gòu)中指針指向的內(nèi)存被重復(fù)釋放,進(jìn)而導(dǎo)致一些不可預(yù)期的異常。為什么數(shù)組名作為參數(shù),會改變數(shù)組的內(nèi)容,而其它類型如int卻不會改變變量的值?【參考答案】當(dāng)數(shù)組名作為參數(shù)時,傳遞的實際上是地址。而其他類型如int作為參數(shù)時,由于函數(shù)參數(shù)值實質(zhì)上是實參的一份拷貝,被調(diào)函數(shù)內(nèi)部對形參的改變并不影響實參的值。傳值與傳地址的區(qū)別你覺得如果不使用常量,直接在程序中填寫數(shù)字或字符串,將會有什么麻煩?【參考答案】(1)程序的可讀性(可理解性)變差。程序員自己會忘記那些數(shù)字或字符串是什么意思,用戶則更加不知它們從何處來、表示什么。(2)在程序的很多地方輸入同樣的數(shù)字或字符串,難保不發(fā)生書寫錯誤。(3)如果要修改數(shù)字或字符串,則會在很多地方改動,既麻煩又容易出錯。為什么需要使用堆,使用堆空間的原因?【參考答案】直到運行時才知道一個對象需要多少內(nèi)存空間;不知道對象的生存期到底有多長。因為需要動態(tài)分配內(nèi)存啊。。。37.const關(guān)鍵字?有哪些作用【參考答案】const關(guān)鍵字至少有下列n個作用:(1)欲阻止一個變量被改變,可以使用const關(guān)鍵字。在定義該const變量時,通常需要對它進(jìn)行初始化,因為以后就沒有機會再去改變它了;(2)對指針來說,可以指定指針本身為const,也可以指定指針?biāo)傅臄?shù)據(jù)為const,或二者同時指定為const;在一個函數(shù)聲明中,const可以修飾形參,表明它是一個輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值;(這樣既可以利用傳地址、傳引用的高效特性,又保證了傳值的安全性)對于類的成員函數(shù),若指定其為const類型,則表明其是一個常函數(shù),不能修改類的成員變量;還記得如果要修改成員變量,應(yīng)該把成員變量聲明為什么嗎?mutable!對于類的成員函數(shù),有時候必須指定其返回值為const類型,以使得其返回值不為“左值”。更多更詳細(xì)的內(nèi)容,推薦看《EffectiveC++》、是不是一個父類寫了一個virtual函數(shù),如果子類覆蓋它的函數(shù)不加virtual,也能實現(xiàn)多態(tài)?【參考答案】virtuaI修飾符會被隱形繼承的。virtual可加可不加。子類的空間里有父類的所有變量(static除外)。同一個函數(shù)只存在一個實體(inline除外)。子類覆蓋它的函數(shù)不加virtual,也能實現(xiàn)多態(tài)。在子類的空間里,有父類的私有變量。私有變量不能直接訪問。不過最好是加上,加上表明它是一個虛函數(shù),這樣提高了代碼的閱讀性。面向?qū)ο蟮娜齻€基本特征,并簡單敘述之?【參考答案】1.封裝:將客觀事物抽象成類,每個類對自身的數(shù)據(jù)和方法實行protection(private,protected,public)2.繼承:廣義的繼承有三種實現(xiàn)形式:實現(xiàn)繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現(xiàn)代碼)、接口繼承(僅使用屬性和方法,實現(xiàn)滯后到子類實現(xiàn))。前兩種(類繼承)和后一種(對象組合=>接口繼承以及純虛函數(shù))構(gòu)成了功能復(fù)用的兩種方式。3.多態(tài):是將父對象設(shè)置成為和一個或更多的與他的子對象相等的技術(shù),賦值之后父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運作。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。40.重載(overload)、重寫(override,有的書也叫做"覆蓋”)、重定義(redefinition)的區(qū)別?【標(biāo)準(zhǔn)答案】重載同一名字空間是指允許存在爹個同名函數(shù)「而3函數(shù)的參數(shù)恚:個同?玄包|重定義丿隱不同名字空間用于繼承派生類與基類的函數(shù)同名屏蔽基類的函數(shù)藏重寫丿覆蓋個同名字空間用于繼承]子類重新定義父類虛函數(shù)的方法41.多態(tài)的作用?【參考答案】主要是兩個:隱藏實現(xiàn)細(xì)節(jié),使得代碼能夠模塊化;擴展代碼模塊,實現(xiàn)代碼重用;接口重用:為了類在繼承和派生的時候,保證使用家族中任一類的實例的某一屬性時的正確調(diào)用。當(dāng)一個類A中沒有聲明任何成員變量與成員函數(shù),這時sizeof(A)的值是多少,如果不是零,請解釋一下編譯器為什么沒有讓它為零。【標(biāo)準(zhǔn)答案】sizeof(A)二1;編譯器不允許一個類的大小為0,會為它分配1字節(jié)的內(nèi)存。試想,若,不這樣做,那2個類A的實例在內(nèi)存中將會無法區(qū)分。。。如果ClassA中定義并實現(xiàn)虛函數(shù)intfunc(void),ClassB中也實現(xiàn)該函數(shù),那么[cpp]viewplaincopyAa;a->func()將調(diào)用哪個類里面的函數(shù)?如果intfunc(void)不是虛函數(shù),情況又如何?為什么?【參考答案】第一問調(diào)用的是B的。第二問調(diào)用A的。虛函數(shù)的一個典型應(yīng)用,虛函數(shù)只能借助于指針或者引用來達(dá)到多態(tài)的效果。C++里面是不是所有的動作都是main()引起的?如果不是,請舉例。【參考答案】比如全局變量的初始化,就不是由main函數(shù)引起的。舉例:[cpp]viewplaincopyclassA{};Aa;//a的構(gòu)造函數(shù)限執(zhí)行intmain(){}內(nèi)聯(lián)函數(shù)在編譯時是否做參數(shù)類型檢查【參考答案】內(nèi)聯(lián)函數(shù)要做參數(shù)類型檢查,這是內(nèi)聯(lián)函數(shù)跟宏相比的優(yōu)勢。請講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?【參考答案】析構(gòu)函數(shù)是特殊的類成員函數(shù),它沒有返回類型,沒有參數(shù),不能隨意調(diào)用,也沒有重載,只有在類對象的生命期結(jié)束的時候,由系統(tǒng)自動調(diào)用。有適放內(nèi)存空間的作用。虛函數(shù)是C++多態(tài)的一種表現(xiàn)使用虛函數(shù),我們可以靈活的進(jìn)行動態(tài)綁定,當(dāng)然是以一定的開銷為代價。如果一個類是作為基類存在的,一定要聲明一個虛析構(gòu)函數(shù),否則刪除動態(tài)分配的子類實例時會出現(xiàn)"局部刪除",造成內(nèi)存泄露和未知錯誤47.“new”inc++isa:libraryfunctionlikemallocinckeywordoperatornoneoftheabove【參考答案】C。malloc是庫函數(shù),不在編譯器控制范圍之內(nèi);new是運算符,在編譯器控制范圍之內(nèi)。調(diào)用malloc時,從堆中申請內(nèi)存;調(diào)用new時,從堆中申請內(nèi)存并為內(nèi)存調(diào)用構(gòu)造函數(shù)。對于C++中類(class)與結(jié)構(gòu)(struct)的描述正確的為:類中的成員默認(rèn)是private的,當(dāng)是可以聲明public,private和protected,結(jié)構(gòu)中定義的成員默認(rèn)的都是public;結(jié)構(gòu)中不允許定義成員函數(shù),當(dāng)是類中可以定義成員函數(shù);結(jié)構(gòu)實例使用malloc()動態(tài)創(chuàng)建,類對象使用new操作符動態(tài)分配內(nèi)存;結(jié)構(gòu)和類對象都必須使用new創(chuàng)建;結(jié)構(gòu)中不可以定義虛函數(shù),當(dāng)是類中可以定義虛函數(shù).結(jié)構(gòu)不可以存在繼承關(guān)系,當(dāng)是類可以存在繼承關(guān)系.【標(biāo)準(zhǔn)答案】A,D兩個互相獨立的類:ClassA和ClassB,都各自定義了非靜態(tài)的公有成員函數(shù)PublicFunc()和非靜態(tài)的私有成員函數(shù)PrivateFunc();現(xiàn)在要在ClassA中增加定義一個成員函數(shù)ClassA::AdditionaIPunction(ClassAa,ClassBb);則可以在AdditionaIPunction(CIassAx,CIassBy)的實現(xiàn)部分(函數(shù)功能體內(nèi)部)出現(xiàn)的合法的表達(dá)是最全的是:x.PrivateFunc();x.PublicFunc();y.PrivateFunc

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論