【正文】
tern C聲明后,模塊A的頭文件變?yōu)椋?/ 模塊A頭文件 ifndef MODULE_A_Hdefine MODULE_A_Hextern C int foo( int x, int y )。我們在思考問題時,不能只停留在這個語言是怎么做的,還要問一問它為什么要這么做,動機是什么,這樣我們可以更深入地理解許多問題):實現(xiàn)C++與C及其它語言的混合編程。} // c++實現(xiàn)文件,調用add:extern C{#i nclude }int main(int argc, char* argv[]){add(2,3)。C引用C++函數(shù)例子工程中包含的三個文件的源代碼如下://C++頭文件 ifndef CPP_EXAMPLE_Hdefine CPP_EXAMPLE_Hextern C int add( int x, int y )。return 0。前兩種(類繼承)和后一種(對象組合=接口繼承以及純虛函數(shù))構成了功能復用的兩種方式。從定義上來說:重載:是指允許存在多個同名函數(shù),而這些函數(shù)的參數(shù)表不同(或許參數(shù)個數(shù)不同,或許參數(shù)類型不同,或許兩者都不同)。和function func(p:string):integer。當子類重新定義了父類的虛函數(shù)后,父類指針根據(jù)賦給它的不同的子類指針,動態(tài)的調用屬于子類的該函數(shù),這樣的函數(shù)調用在編譯期間是無法確定的(調用的子類的虛函數(shù)的地址無法給出)。但是Ado使用OLE DB 接口并基于微軟的COM 技術, 擁有自己的 體系架構。用malloc函數(shù)需要指定內存分配的字節(jié)數(shù)并且不能初始化對象,new 會自動調用對象的構造函數(shù)。兩個不同類型的指針之間可以強制轉換(用reinterpret cast)。內存在程序編譯的時候就已經(jīng)分配好,這塊內存在程序的整個運行期間都存在。棧內存分配運算內置于處理器的指令集。 和 class 的區(qū)別答案:struct 的成員默認是公有的,而類的成員默認是私有的。既然大多數(shù)人都這么認為,那么只有在你的類有很少的方法并且有公有數(shù)據(jù)(這種事情在良好設計的系統(tǒng)中是存在的!)時,你也許應該使用 struct 關鍵字,否則,你應該使用 class 關鍵字。29. 在8086 匯編下,邏輯地址和物理地址是怎樣轉換的?(Intel)答案:通用寄存器給出的地址,是段內偏移地址,相應段寄存器地址*10H+通用寄存器內地址,就得到了真正要訪問的地址。amp。2) 有些集成化的調試工具可以對const 常量進行調試,但是不能對宏常量進行調試。a[0] = ‘X’。sizeof(p),p 為指針得到的是一個指針變量的字節(jié)數(shù),而不是p 所指的內存容量。char *p = a。 // 4 字節(jié)而不是100 字節(jié)} 、覆蓋和隱藏區(qū)別?答案::(1)相同的范圍(在同一個類中);(2)函數(shù)名字相同;(3)參數(shù)不同;(4)virtual 關鍵字可有可無。?。?)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有virtual 關鍵字。37. main 主函數(shù)執(zhí)行完畢后,是否可能會再執(zhí)行一段代碼,給出說明? 答案:可以,可以用_onexit 注冊一個函數(shù),它會在main 之后執(zhí)行int fn1(void), fn2(void), fn3(void), fn4 (void)。_onexit( fn3 )。return 0。return 0。elsecoutc。int tag = false 。 j count i 1 。data[j+1] = temp 。if ( !in){coutfile error!。(temp)。if ( !out){coutfile error!。 i++) outdata[i] 。}。Node *p2 = p1next 。p1 = p2 。head = p2 。if ( head2 == NULL)return head1 。if ( head1data head2data ){head = head1 。p2 = head2next 。amp。}else {pcurrentnext = p2 。if ( p2 != NULL )pcurrentnext = p2 。if ( head2 == NULL)return head1 。}else {head = head2 。}~B(){ coutdestructedendl。B Play( B b) {return b 。 destructed t2 注意順序!} destructed t1(2) results:int main(int argc, char* argv[]) constructed by parameter 5{ destructed B(5)形參析構B t1 = Play(5)。int find_sec_max( int data[] , int count){int maxnumber = data[0] 。 i++){if ( data[i] maxnumber ){sec_max = maxnumber 。}43. 寫一個在一個字符串(n)中尋找一個子串(m)第一個位置的函數(shù)??梢詤⒖肌渡钊胩剿鰿++對象模型》,或者:45. 如何判斷一個單鏈表是有環(huán)的?(注意不能用標志位,最多只能用兩個額外指針)struct node { char val。while(fast!=NULL amp。 if(low==fast) return true。char sex。}*linklist。hnext = NULL。i++){ s = (struct stu *)malloc(sizeof(struct stu))。ssex,amp。訪問固定的內存位置(Accessing fixed memory locations) C C++ Development10. 嵌入式系統(tǒng)經(jīng)常具有要求程序員去訪問某特定的內存位置的特點。這一問題測試你是否知道為了訪問一絕對地址把一個整型數(shù)強制轉換(typecast)為一指針是合法的。 *ptr = 0xaa55。具代表事實是,產生了一個新的關鍵字__interrupt。 return area。如果你沒有看到這一點,你被雇用的機會等同第一項。 4). 與第三點一脈相承,printf()經(jīng)常有重入和性能上的問題。 int b = 20。原因是當表達式中存在有符號類型和無符號類型時所有的操作數(shù)都自動轉換為無符號類型。13. 評價下面的代碼片斷:unsigned int zero = 0。這一問題真正能揭露出應試者是否懂得處理器字長的重要性。但如果顯然應試者做得不錯,那么我就扔出下面的追加 問題,這些問題是比較難的,我想僅僅非常優(yōu)秀的應試者能做得不錯。這個主題已經(jīng)在ESP雜志中被廣泛地討論過了(主要是 . Plauger, 他的解釋遠遠超過我這里能提到 的任何解釋),所有回過頭看一下這些雜志吧!讓應試者進入一種虛假的安全感覺后,我拿出這么一個小節(jié)目:下面的代碼片段的輸出是什么,為什么?char *ptr。最近在我的一個同事不經(jīng)意把0值傳給了函數(shù)malloc,得到了一個合法的指針之后,我才想到這個問題。Typedef 15. Typedef 在C語言中頻繁用以聲明一個已經(jīng)存在的數(shù)據(jù)類型的同義字。哪種方法更好呢?(如果有的話)為什么? 這是一個非常微妙的問題,任何人答對這個問題(正當?shù)脑颍┦菓敱还驳摹5谝粋€擴展為 struct s * p1, p2。 c = a+++b。因此,上面的代碼被處理成: c = a++ + b。我發(fā)現(xiàn)這個問題的最大好處是:這是一個關于代碼編寫風格,代碼的可讀性,代碼的可修改性的好的話題What will print out? main() { char *p1=“name”。 while(*p2++ = *p1++)。 y= ++y + ++x。 }Answer: 5,20,1 What will be printed as the result of the operation below:define swap(a,b) a=a+b。 swap (x,y)。 } int swap2(int a, int b) { int temp。 return 0。 ptr++。 printf(“%s”,s1)。 p2=(char *)malloc(25)。 printf(“%s”,p1)。 } int changevalue(int x) { return(x+=1)。 x++。 changevalue(x)。 } Answer: 12 , 13 , 13 What will be printed as the result of the operation below: main(){ int x=10, y=15。 } Answer: 11, 16 What will be printed as the result of the operation below:main(){ int a=0。 ,是否可能會再執(zhí)行一段代碼? 函數(shù),如果子類覆蓋它的函數(shù)不加virtual ,也能實現(xiàn)多態(tài)?在子類的空間里,有沒有父類的這個函數(shù),或者父類的私有變量?、例如 “ababc”要求返回“ab”. 因為“ab”連續(xù)重復出現(xiàn)且最長。 sprintf、strcpy 及 memcpy 函數(shù),請問這些函數(shù)有什么區(qū)別,你喜歡使用哪個,為什么?? 32 位平臺上的運行結果,并說明 sizeof 的性質:include include int main(void) { char a[30]。 printf(%d\n, sizeof(a[3]))。}。 c)請編寫一個 C 函數(shù),該函數(shù)將給定的一個整數(shù)轉換成字符串。給出演示上述函數(shù)功能的一個簡單程序,并請編寫對應的 Makefile 文件,需要處理大量圖形(Shape)信息,圖形有矩形(Rectangle),正方形(Square),圓形 (Circle)等種類,應用需要計算這些圖形的面積,并且可能需要在某個設備上進行顯示(使用在標準輸出上打印信息的方式做為示意)。 assert(() == 150)。char buf[4]。}a) When piled and executed on x86, why does this program usually not output what the programmer intended? b) Name several ways in which the security problem that causes this program not to output what the programmer intended can be prevented WITHOUT changing the code. w=1,x=2,y=3,z=4。printf(m=%d,m)。//這里幫忙解釋一下 for(i=0。//這里也幫忙看一下 fclose(fp)。b,sizeof(int),1,fp)。 struct node *front,*next。}void main(){printf(%s, GetStr())。實現(xiàn)一個WORD(2個字節(jié))的高低位交換!!,P2,P3,P4內存來做緩沖,大小自定,但這四個緩沖的大小要一樣,并且是連續(xù)的!,用C語言寫一函數(shù)實現(xiàn)對浮點數(shù)組A進行降序排序,并輸出結果,要求要以數(shù)組A作為函數(shù)的入口.(建議用冒泡排序法):include include class Base{private:char * name。}char * copyName(){char newname [256]。}static void print(Base base){printf(name: %s\n , )。Base::print(*pBase)。} ,函數(shù)接收一個字符串,是由十六進制數(shù)組成的一組字符串,.,將前半部分按ASCII碼升序排序,后半部分不變,(如果字符串是奇數(shù)則中間的字符不變,)最后再將前后兩部分交換,然后將該字符串輸出,測試字符串“ADZDDJKJFIEJHGI”Void test1(){ char string[10]。for(I=0。}strcpy(string, str1)。 int I。}}if(I=MAX_SRM) return (NULL_SRM)。c+=1。int a=2。}}34. int func(int a){ int b。 default: 0 }return b。 a[2]=2。a[2]。 s=s1。:無序數(shù)組,折半查找,各元素值唯一。并說明為什么。sizeof(S1) = ?class X{public:X()。virtual void myVirtualFunc()