復(fù)習(xí)--c面試題筆試匯總_第1頁(yè)
復(fù)習(xí)--c面試題筆試匯總_第2頁(yè)
復(fù)習(xí)--c面試題筆試匯總_第3頁(yè)
復(fù)習(xí)--c面試題筆試匯總_第4頁(yè)
復(fù)習(xí)--c面試題筆試匯總_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

①鏈如一個(gè)鏈表是這樣的:1->2->3->4->5通過(guò)反轉(zhuǎn)后成為5->4->3->2->1。structlinkaintlinka*voidreverse(linka*&head)if(headlinka*pre,*cur,ne=cur-cur->next=pre=cur=18.head->next=19.head=最后一個(gè)結(jié)點(diǎn)會(huì)形成一個(gè)環(huán),所以必須將函數(shù)的返回的節(jié)點(diǎn)的next域置為NULL。因?yàn)橐淖僪ead指針,所以我用了。算法的源代碼如下:linka*reverse(linka*p,linka*&{if(p==NULL||p->next=={return7.{linka*tmp=reverse(p-tmp->next=return②已知String類定class{String(constchar*strNULL);String(constString&another);~String();String&operater=(constString&rhs);char*m_data;String::String(constchar{ifstrNULL//strlenNULL{m_data=newchar[1];m_data[0]='\0';}{m_data=newchar[strlen(str)+1];}}String::String(constString{m_data=newchar[strlen(another.m_data)+1];}String&String::operator=(constString{if(this==&rhs)return*this;m_data=newchar[strlen(rhs.m_data)+1];return*this}{delete[]m_data}③網(wǎng)上流傳的c++筆試題求下面函數(shù)的返回值(微軟int{intcountx=0;{countxx=x&(x-}return}x9999答:就是某個(gè)目標(biāo)變量的“別名”(alias),對(duì)應(yīng)用的操作與對(duì)變量直接操 將“”作為函數(shù)參數(shù)有哪些特點(diǎn)率和所占空間。在什么時(shí)候需要使用“常如果既要利用提高程序的效率,又要保護(hù)傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變,就應(yīng)使用常。常方式:const類型標(biāo)識(shí)符&名=目標(biāo)變量例1intaconstint&ra=a;ra=1;//錯(cuò)誤a=1;//正確stringfoo(voidbar(string&bar(foo( o原因在于foo()和"oworld"串都會(huì)產(chǎn)生一個(gè)臨時(shí)對(duì)象,而在C++中,這些臨時(shí)對(duì)象都是const上面的表達(dá)式就是試圖將一個(gè)const類型的對(duì)象轉(zhuǎn)換為非const類型,這是的。將“”作為函數(shù)返回值類型的格式、好處和需要遵守的規(guī)則&函數(shù)名(形參列表及類型說(shuō)明)用也會(huì)失效,產(chǎn)生runtimeerror!不能返回局部變量的。這條可以參照EffectiveC++[1]的Item31。的Item31。雖然不存在局部變量的 new分配內(nèi)存的),又 是作為一個(gè)臨時(shí)變量出現(xiàn),而沒(méi)有被賦予一個(gè)實(shí)際的變量,那么這個(gè) 向的空間(由new分配)就無(wú)法釋放,造成memoryleak??梢苑祷仡惓蓡T的,但最好是const。這條原則可以參照Effective賦值操作封裝在一個(gè)業(yè)務(wù)規(guī)則當(dāng)中。如果其它對(duì)象可以獲得該屬性的非常量引endl;因此這兩個(gè)操作符的返回值應(yīng)該是一個(gè)仍然支持這兩個(gè)操作符的流引回一個(gè)流對(duì)象,程序必須重新(拷貝)構(gòu)造一個(gè)新的流對(duì)象,也就是說(shuō),連續(xù)的兩個(gè)<<操作符實(shí)際上是針對(duì)不同對(duì)象的!這無(wú)法讓人接受。對(duì)于返回一個(gè)流一選擇很關(guān)鍵,它說(shuō)明了的重要性以及無(wú)可替代性,也許這就是C++語(yǔ)言 可以連續(xù)使用的,例如:xj10;或者(x=10)=100;賦值操作符的返回值必須#iint&put(intn);intvals[10];interror=-1;voidmain(){put(0)=10;put(0)vals[0]=10;put(9)=20;put(9)vals[9]=20;int&put(int{if(n>=0&&n<=9)returnelse{cout<<"subscripterror";returnerror;}能返回,EffectiveC++[1]的Item23詳細(xì)的討論了這個(gè)問(wèn)題。主要原因是new象的、返回一個(gè)靜態(tài)對(duì)象。根據(jù)前面提到的作為返回值的三個(gè)規(guī)2、3兩個(gè)方案都被否決了。靜態(tài)對(duì)象的又因?yàn)?(a+b)(c+d))會(huì)“”與多態(tài)的關(guān)系ClassA;ClassB:ClassA{...};Bb;A&ref=“”與指針的區(qū)別是什么ref和pointer什么時(shí)候需要“2-8{inti;void{a.x[0]=a.x[1]=}{union{/*定義一個(gè)聯(lián)合intcharfirst;charnumber.i=0x4241;/*聯(lián)合成員賦值printf("%c%c\n",number.half.first,mumber.half.second);number.half.first='a';/*聯(lián)合中結(jié)構(gòu)成員賦值*/}6261(number.i和number.half已知strcpy的函數(shù)原型:char*strcpy(char*strDest,constchar*strSrc)其中strDest是目的字符串,strSrc是源字符串。不調(diào)用C++/C的字符串庫(kù)函數(shù),請(qǐng)編寫(xiě)函數(shù)strcpy。char*strcpy(char*strDest,constchar{if(strDest==NULL||strSrc==NULL)returnNULL;if(strDest==strSrc)returnstrDest;char*tempptr=strDestwhile((*strDest++=*strSrc++)!=returntempptr}Stringclass{String(constchar*strNULL);String(constString&another);~String();String&operater=(constString&rhs);char*m_data;String::String(constchar{ifstrNULL//strlenNULL{m_data=newchar[1];m_data[0]='\0';}{m_data=newchar[strlen(str)+1];}}String::String(constString{m_data=newchar[strlen(another.m_data)+1];}String&String::operator=(constString{if(this==&rhs)return*this;m_data=newchar[strlen(rhs.m_data)+1];return*this}{delete[]m_data}.h頭文件中的ifndef/define/ 的作用#include與#includefileh"的區(qū)別作路徑搜尋并file.h。在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加externC/C++語(yǔ)言中表明函數(shù)和全局變量作用范圍(可見(jiàn)性)的模塊BA編譯extern"C"是連接申明(linkagedeclaration),extern"C"修飾的變量和函voidfoo(intx,inty相同的機(jī)制,生成的新名字稱為“mangledname”)。C++voidfoo(intx,intyvoidfoo(intx,floaty)編譯生成的符號(hào)是不相同的,后者為_(kāi)foo_int_float未加extern"C"時(shí)的連接方式//模塊A頭文件moduleA.h#ifndefMODULE_A_H#defineMODULE_A_Hintfoo(intx,inty);在模塊B中該函數(shù)//模塊B實(shí)現(xiàn)文 #include"moduleA.h"加extern"C"后的編譯和連接方//模塊A頭文件moduleA.h#ifndefMODULE_A_H#defineMODULE_A_Hextern"C"intfoo(intx,inty);intfoo(intx,inty),則模塊BA所以,可以用一句話概括extern“C”這個(gè)的真實(shí)目的(任何語(yǔ)言中的任是什么,這樣我們可以更深入地理解許多問(wèn)題)C++與C及其它語(yǔ)言明白了C++中extern"C"的設(shè)立,我們下面來(lái)具體分析extern"C"通常的extern"C"extern{#include}#ifndefC_EXAMPLE_H#defineexternintadd(intx,inty);/*c:cExample.c#include"cExample.h"intadd(intx,inty{returnx+}extern"C"{#include}intmain(intargc,char*{return}時(shí),應(yīng)加extern"C"{ 在C中C++語(yǔ)言中的函數(shù)和變量時(shí),C++的頭文件需添加extern"C",但是在C語(yǔ)言中不能直接 了extern"C"的該頭文件,應(yīng)該僅將C文件中將C++中定義的extern"C"函數(shù) 為extern類型。CC++函數(shù)例子工程中包含的三個(gè)文件的源代碼如下#ifndefCPP_EXAMPLE_H#defineCPP_EXAMPLE_Hextern"C"intadd(intx,inty);//C++實(shí)現(xiàn)文件#include"cppExample.h"intadd(intx,inty){returnx+}/*C/*:#include"cExample.h*/externintadd(intx,inty);intmain(intargc,char*argv[]{add(2,3return}15題目的解答請(qǐng)參考《C++中extern“C”含義探索》注解關(guān)聯(lián)、聚合(Aggregation)以及組合(Composition)涉及到UMLclassA{...}classB{A* classA{...}classB{A protection(private,(僅使用屬性和方法,實(shí)現(xiàn)滯后到子類實(shí)現(xiàn))。前兩種(類繼承)和后重載(overload)和重寫(xiě)(overried,有的書(shū)也叫做“覆蓋”)的區(qū)functionfunc(p:integer):integerfunctionfunc(p:string):integer;。兩個(gè)函數(shù)的調(diào)用,在編譯器間就已經(jīng)確定了,是靜態(tài)的。也就是說(shuō),它們的地主要是兩個(gè):1.碼重用;2.接口重用:為了類在繼承和派生的時(shí)候,保證使用中任一類的AdoAdonet的相同與不同除了“能夠讓?xiě)?yīng)用程序處理于DBMS中的數(shù)據(jù)“這一基本相似點(diǎn)外,兩者沒(méi)有太多共同AdoOLEDBCOMADO.NET擁有自己的ADO.NET接口并且基于微軟的.NET體系架構(gòu)。眾所周知.NET體系不同于COM體系,ADO.NETADO和OLEDBADO.NETADO是兩種數(shù)據(jù)方式。ADO.net提供對(duì)XML的支持。Newdeletemallocfree的聯(lián)系與區(qū)別且不能初始化對(duì)象,new會(huì)自動(dòng)調(diào)用對(duì)象的構(gòu)造函數(shù)。deletedestructor,而#defineDOUBLE(x)x+x,i5*DOUBLE(5);i是多少答案:i30有哪幾種情況只能用intializationlist而不能用C++main函數(shù)執(zhí)行以前,還會(huì)執(zhí)行什描述內(nèi)存分配方式以及它們的區(qū)別行期間都存在。例如全局變量,static變量。mallocnew申請(qǐng)任意多少的struct和class的區(qū)答案:struct的成員默認(rèn)是公有的,而類的成員默認(rèn)是私有的。structclass在其他方面且有公有數(shù)據(jù)(!)struct關(guān)鍵字,否則,你應(yīng)該使用class關(guān)鍵字。當(dāng)一個(gè)類A中沒(méi)有生命任何成員變量與成員函數(shù),這時(shí)sizeof(A)的值是多少,如果不是請(qǐng)參考:,重點(diǎn)是dynamic_castreinterpret_castBOOL:if(!a)orif(a)int:if(a==0)float:constEXPRESSIONEXP=0.000001if(a<EXP&&a>-EXP)pointer:if(a!=NULL)orif(a==請(qǐng)說(shuō)出const與#define答案:1)const常量有數(shù)據(jù)類型,而宏常量沒(méi)有數(shù)據(jù)類型。編譯器可以對(duì)前者進(jìn)行類型安chara[]=“a[0]=char*pworld”;//pp[0]X’;//用運(yùn)算符sizeof可以計(jì)算出數(shù)組的容量(字節(jié)數(shù)。sizeof(p),p為指針得到的是一個(gè)指p所指的內(nèi)存容量。C++/C語(yǔ)言沒(méi)有辦法知道指針?biāo)傅膬?nèi)存容chara[]="oworld";char*p=a;coutsizeof(aendl12字節(jié)cout<<sizeof(p)<<endl;//4字節(jié)voidFunc(char{coutsizeof(aendl4100}irtualvirtual關(guān)鍵字,Therearetwointvariables:aandb,don’tuse“if”,“?:”,“switch”orotherjudgementstatements,findoutthebiggestoneofthetwonumbers.答案:ababsabcout<< cout<<LINE 和LINE 答案:可以,可以用_onexit一個(gè)函數(shù),它會(huì)在main之后執(zhí)行intfn1(void),fn3(void),fn4(void);voidmain(void){_onexit(fn1_onexit(fn2_onexit(fn3_onexit(fn4printf("Thisisexecutedfirst.\n"}int{printf("next.\n");return0;}int{printf("executed");return0;}int{printf("is");return0;}int{printf("This");return0;}The_onexitfunctionispassedtheaddressofafunction(func)tobecalledwhentheprogramterminatesnormally.Successivecallsto_onexitcreatearegisteroffunctionsthatareexecutedinLIFO(last-in-first-out)order.Thefunctionspassedto_onexitcannottakeparameters.C編譯程序還是由C++#ifdefcplusplus#i#iusingnamespace{intcount=data.size()inttagfalse;//for(inti=0;i<count;{for(intj=0;j<count-i-1;{if(data[j]>{tag=trueinttemp=data[j];data[j+1]=temp;}}if(!tag)break;}}voidmain(void{ifstreamin("c:\\data.txt");if(!in){}int{}if(!out){ifif(head1->data<head2->data}for(i=0;i<data.size();out<40.struct{intdata;typedefstructNodeNode已知鏈表的頭結(jié)點(diǎn)head,寫(xiě)一個(gè)函數(shù)把這個(gè)鏈表逆序(In Node*ReverseList(Node*head)//鏈表逆序{if(head==NULL||head->next==NULL)returnhead;Node*p1=head;Node*p2=p1->next;Node*p3=p2->next;p1->next=NULL;while(p3!=NULL){p2->next=p1;p1=p2;p2=p3p3=p3->next}p2->next=p1;head=p2;returnhead;}head1head2各自有序,請(qǐng)把它們合并成一個(gè)鏈表依然有序。(保留所有Node*Merge(Node*head1,Node{if(head1==NULL)returnhead2;if(head2==NULL)returnhead1;Node*head=NULL;Node*p1=NULL;Node*p2=NULL;{head=head1p1=head1->next;p2=head2;}{head=head2p2=head2->next;p1=head1;}Node*pcurrent=headwhile(p1!=NULL&&p2!={if(p1->data<=p2->data{pcurrent->next=p1;pcurrent=p1;p1=p1->next}{pcurrent->next=p2;pcurrent=p2;p2=p2->next}}if(p1!=NULLpcurrent->next=p1;if(p2!=NULL)pcurrent->next=p2;returnhead;}head1head2各自有序,請(qǐng)把它們合并成一個(gè)鏈表依然有序,這次要求用遞歸方法進(jìn)行。(Autodesk)Node*MergeRecursive(Node*head1,Node{if(head1==NULL)returnhead2;if(head2==NULL)returnhead1;Node*head=

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論