完整word版,c++經(jīng)典面試題_第1頁(yè)
完整word版,c++經(jīng)典面試題_第2頁(yè)
完整word版,c++經(jīng)典面試題_第3頁(yè)
完整word版,c++經(jīng)典面試題_第4頁(yè)
完整word版,c++經(jīng)典面試題_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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)介

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

溫馨提示

  • 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)論