c開發(fā)工程師常用面試題_第1頁
c開發(fā)工程師常用面試題_第2頁
c開發(fā)工程師常用面試題_第3頁
c開發(fā)工程師常用面試題_第4頁
c開發(fā)工程師常用面試題_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

1、面向對象的程序設計思想是什么?答:把數(shù)據(jù)結構和對數(shù)據(jù)結構進行操作的方法封裝形成一個個的對象。什么是類?答:把一些具有共性的對象歸類后形成一個集合,也就是所謂的類。對象都具有的二方面特征是什么?分別是什么含義?答:對象都具有的特征是:靜態(tài)特征和動態(tài)特征。靜態(tài)特征是指能描述對象的一些屬性,動態(tài)特征是指對象表現(xiàn)出來的行為在頭文件中進行類的聲明,在對應的實現(xiàn)文件中進行類的定義有什么意義?答:這樣可以提高編譯效率,因為分開的話只需要編譯一次生成對應的 .obj 文件后,再次應用該類的地方,這個類就不會被再次編譯,從而大大提高了效率。在類的內(nèi)部定義成員函數(shù)的函數(shù)體,這種函數(shù)會具備那種屬性?答:這種函數(shù)會自

2、動為內(nèi)聯(lián)函數(shù),這種函數(shù)在函數(shù)調(diào)用的地方在編譯階段都會進行代碼替換。成員函數(shù)通過什么來區(qū)分不同對象的成員數(shù)據(jù)?為什么它能夠區(qū)分?答:通過 this 指針來區(qū)分的, 因為它指向的是對象的首地址。C+編譯器自動為類產(chǎn)生的四個缺省函數(shù)是什么?答:默認構造函數(shù),拷貝構造函數(shù),析構函數(shù),賦值函數(shù)。拷貝構造函數(shù)在哪幾種情況下會被調(diào)用?答: 1.當類的一個對象去初始化該類的另一個對象時;2.如果函數(shù)的形參是類的對象,調(diào)用函數(shù)進行形參和實參結合時;1/293.如果函數(shù)的返回值是類對象,函數(shù)調(diào)用完成返回時。構造函數(shù)與普通函數(shù)相比在形式上有什么不同?(構造函數(shù)的作用,它的聲明形式來分析)答:構造函數(shù)是類的一種特殊成

3、員函數(shù),一般情況下,它是專門用來初始化對象成員變量的。構造函數(shù)的名字必須與類名相同,它不具有任何類型,不返回任何值。什么時候必須重寫拷貝構造函數(shù)?答:當構造函數(shù)涉及到動態(tài)存儲分配空間時,要自己寫拷貝構造函數(shù),并且要深拷貝。構造函數(shù)的調(diào)用順序是什么?答: 1.先調(diào)用基類構造函數(shù)2.按聲明順序初始化數(shù)據(jù)成員3.最后調(diào)用自己的構造函數(shù)。哪幾種情況必須用到初始化成員列表?答:類的成員是常量成員初始化;類的成員是對象成員初始化,而該對象沒有無參構造函數(shù)。類的成員為引用時。什么是常對象?答:常對象是指在任何場合都不能對其成員的值進行修改的對象。靜態(tài)函數(shù)存在的意義?答:靜態(tài)私有成員在類外不能被訪問,可通過類

4、的靜態(tài)成員函數(shù)來訪問;2/29當類的構造函數(shù)是私有的時,不像普通類那樣實例化自己,只能通過靜態(tài)成員函數(shù)來調(diào)用構造函數(shù)。在類外有什么辦法可以訪問類的非公有成員?答:友元,繼承,公有成員函數(shù)。什么叫抽象類?答:不用來定義對象而只作為一種基本類型用作繼承的類。運算符重載的意義?答:為了對用戶自定義數(shù)據(jù)類型的數(shù)據(jù)的操作與內(nèi)定義的數(shù)據(jù)類型的數(shù)據(jù)的操作形式一致。不允許重載的 5 個運算符是哪些?答:1. .* (成員指針訪問運算符號):域運算符Sizeof 長度運算符號?:條件運算符號5.(成員訪問符)運算符重載的三種方式?答:普通函數(shù),友元函數(shù),類成員函數(shù)。流運算符為什么不能通過類的成員函數(shù)重載?一般怎

5、么解決?答:因為通過類的成員函數(shù)重載必須是運算符的第一個是自己,而對流運算的重載要求第一個參數(shù)是流對象。一般通過友元來解決。賦值運算符和拷貝構造函數(shù)的區(qū)別與聯(lián)系?3/29答:相同點:都是將一個對象copy 到另一個中去。不同點:拷貝構造函數(shù)涉及到要新建立一個對象。在哪種情況下要調(diào)用該類的析構函數(shù)?答:對象生命周期結束時。對象間是怎樣實現(xiàn)數(shù)據(jù)的共享的?答:通過類的靜態(tài)成員變量來實現(xiàn)的。靜態(tài)成員變量占有自己獨立的空間不為某個對象所私有。友元關系有什么特性?答:單向的,非傳遞的,不能繼承的。對對象成員進行初始化的次序是什么?答:它的次序完全不受它們在初始化表中次序的影響,只有成員對象在類中聲明的次序

6、來決定的。類和對象之間的關系是什么?答:類是對象的抽象,對象是類的實例。對類的成員的訪問屬性有什么?答: public,protected ,private 。28.const char *p,char *const p;的區(qū)別如果 const 位于星號的左側,則 const 就是用來修飾指針所指向的變量,即指針指向為常量;如果 const 位于星號的右側, const 就是修飾指針本身,即指針本身是常量。4/29是不是一個父類寫了一個 virtual 函數(shù),如果子類覆蓋它的函數(shù)不加virtual ,也能實現(xiàn)多態(tài) ?virtual 修飾符會被隱形繼承的。virtual 可加可不加 ,子類覆蓋它

7、的函數(shù)不加virtual , 也能實現(xiàn)多態(tài)。函數(shù)重載是什么意思?它與虛函數(shù)的概念有什么區(qū)別?函數(shù)重載是一個同名函數(shù)完成不同的功能,編譯系統(tǒng)在編譯階段通過函數(shù)參數(shù)個數(shù)、參數(shù)類型不同,函數(shù)的返回值來區(qū)分該調(diào)用哪一個函數(shù),即實現(xiàn)的是靜態(tài)的多態(tài)性。但是記住:不能僅僅通過函數(shù)返回值不同來實現(xiàn)函數(shù)重載。而虛函數(shù)實現(xiàn)的是在基類中通過使用關鍵字 virtual 來申明一個函數(shù)為虛函數(shù),含義就是該函數(shù)的功能可能在將來的派生類中定義或者在基類的基礎之上進行擴展,系統(tǒng)只能在運行階段才能動態(tài)決定該調(diào)用哪一個函數(shù),所以實現(xiàn)的是動態(tài)的多態(tài)性。它體現(xiàn)的是一個縱向的概念,也即在基類和派生類間實現(xiàn)。構造函數(shù)和析構函數(shù)是否可以被

8、重載 ,為什么 ?答:構造函數(shù)可以被重載,析構函數(shù)不可以被重載。因為構造函數(shù)可以有多個且可以帶參數(shù),而析構函數(shù)只能有一個,且不能帶參數(shù)。如何定義和實現(xiàn)一個類的成員函數(shù)為回調(diào)函數(shù)?答:所謂的回調(diào)函數(shù),就是預先在系統(tǒng)的對函數(shù)進行注冊,讓系統(tǒng)知道這個函數(shù)的存在,以后,當某個事件發(fā)生時,再調(diào)用這個函數(shù)對事件進行響應。定義一個類的成員函數(shù)時在該函數(shù)前加 CALLBACK即將其定義為回調(diào)函數(shù),函數(shù)的實現(xiàn)和普通成員函數(shù)沒有區(qū)別虛函數(shù)是怎么實現(xiàn)的?答:簡單說來使用了虛函數(shù)表 .抽象類不會產(chǎn)生實例,所以不需要有構造函數(shù)。錯5/2935.從一個模板類可以派生新的模板類,也可以派生非模板類。對main 函數(shù)執(zhí)行以前

9、,還會執(zhí)行什么代碼?答案:全局對象的構造函數(shù)會在 main 函數(shù)之前執(zhí)行。當一個類 A 中沒有生命任何成員變量與成員函數(shù) ,這時 sizeof(A)的值是多少,如果不是零,請解釋一下編譯器為什么沒有讓它為零。(Autodesk)答案:肯定不是零。舉個反例,如果是零的話,聲明一個class A10對象數(shù)組,而每一個對象占用的空間是零,這時就沒辦法區(qū)分A0,A1了。delete 與 delete 區(qū)別:delete 只會調(diào)用一次析構函數(shù),而delete 會調(diào)用每一個成員的析構函數(shù)。子類析構時要調(diào)用父類的析構函數(shù)嗎?會調(diào)用,析構函數(shù)調(diào)用的次序是先派生類的析構后基類的析構,也就是說在基類的的析構調(diào)用的

10、時候 ,派生類的信息已經(jīng)全部銷毀了40.繼承優(yōu)缺點。1、類繼承是在編譯時刻靜態(tài)定義的,且可直接使用,2、類繼承可以較方便地改變父類的實現(xiàn)。缺點:1、因為繼承在編譯時刻就定義了,所以無法在運行時刻改變從父類繼承的實現(xiàn)2、父類通常至少定義了子類的部分行為,父類的任何改變都可能影響子類的行為3、如果繼承下來的實現(xiàn)不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這種依賴關系限制了靈活性并最終限制了復用性。6/29解釋堆和棧的區(qū)別。棧區(qū)( stack) 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。堆 :一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由 OS回收 。一個類的

11、構造函數(shù)和析構函數(shù)什么時候被調(diào)用 ,是否需要手工調(diào)用 ?答:構造函數(shù)在創(chuàng)建類對象的時候被自動調(diào)用,析構函數(shù)在類對象生命期結束時,由系統(tǒng)自動調(diào)用。何時需要預編譯:總是使用不經(jīng)常改動的大型代碼體。程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭。多態(tài)的作用?主要是兩個:隱藏實現(xiàn)細節(jié),使得代碼能夠模塊化;擴展代碼模塊,實現(xiàn)代碼重用;接口重用:為了類在繼承和派生的時候,保證使用家族中任一類的實例的某一屬性時的正確調(diào)用虛擬函數(shù)與普通成員函數(shù)的區(qū)別?內(nèi)聯(lián)函數(shù)和構造函數(shù)能否為虛擬函數(shù)?答案:區(qū)別:虛擬函數(shù)有 virtual 關鍵字,有

12、虛擬指針和虛函數(shù)表,虛擬指針就是虛擬函數(shù)的接口,而普通成員函數(shù)沒有。內(nèi)聯(lián)函數(shù)和構造函數(shù)不能為虛擬函數(shù)。46.構造函數(shù)和析構函數(shù)的調(diào)用順序? 析構函數(shù)為什么要虛擬 ?7/29答案:構造函數(shù)的調(diào)用順序:基類構造函數(shù) 對象成員構造函數(shù) 派生類構造函數(shù);析構函數(shù)的調(diào)用順序與構造函數(shù)相反。析構函數(shù)虛擬是為了防止析構不徹底,造成內(nèi)存的泄漏。47.C+中類型為 private 的成員變量可以由哪些函數(shù)訪問?只可以由本類中的成員函數(shù)和友員函數(shù)訪問請說出類中 private,protect ,public 三種訪問限制類型的區(qū)別private 是私有類型,只有本類中的成員函數(shù)訪問 ;protect 是保護型的,

13、本類和繼承類可以訪問 ;public 是公有類型,任何類都可以訪問 .類中成員變量怎么進行初始化?可以通過構造函數(shù)的初始化列表或構造函數(shù)的函數(shù)體實現(xiàn)。在什么時候需要使用 “常引用 ”?如果既要利用引用提高程序的效率,又要保護傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變,就應使用常引用。引用與指針有什么區(qū)別?答 、1) 引用必須被初始化,指針不必。引用初始化以后不能被改變,指針可以改變所指的對象。不存在指向空值的引用,但是存在指向空值的指針。描述實時系統(tǒng)的基本特性答 、在特定時間內(nèi)完成特定的任務,實時性與可靠性。全局變量和局部變量在內(nèi)存中是否有區(qū)別?如果有,是什么區(qū)別?答 、全局變量儲存在靜態(tài)數(shù)據(jù)區(qū),局部變

14、量在堆棧中。堆棧溢出一般是由什么原因導致的?8/29答 、沒有回收垃圾資源什么函數(shù)不能聲明為虛函數(shù)?答 構造函數(shù)( constructor )57.IP 地址的編碼分為哪倆部分?答 IP 地址由兩部分組成,網(wǎng)絡號和主機號。58.不能做 switch()的參數(shù)類型是:答 、switch 的參數(shù)不能為實型。如何引用一個已經(jīng)定義過的全局變量?答 、可以用引用頭文件的方式,也可以用 extern 關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那么在編譯期間會報錯,如果你用 extern 方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯對

15、于一個頻繁使用的短小函數(shù) ,在 C 語言中應用什么實現(xiàn) ,在 C+中應用什么實現(xiàn) ?答 、c 用宏定義, c+用 inlineNmC+是不是類型安全的?答案:不是。兩個不同類型的指針之間可以強制轉換(用reinterpret cast)當一個類 A 中沒有生命任何成員變量與成員函數(shù) ,這時 sizeof(A)的值是多少,請解釋一下編譯器為什么沒有讓它為零。答案:1。舉個反例,如果是零的話,聲明一個 class A10對象數(shù)組,而每一個對象占用的空間是零,這時就沒辦法區(qū)分 A0,A1 了。9/29簡述數(shù)組與指針的區(qū)別?數(shù)組要么在靜態(tài)存儲區(qū)被創(chuàng)建(如全局數(shù)組),要么在棧上被創(chuàng)建。指針可以隨時指向任

16、意類型的內(nèi)存塊。(1)修改內(nèi)容上的區(qū)別char a =“ hello”;a0 = X;char *p =“ world 注”意;/p 指向常量字符串p0 = X譯編;/器不能發(fā)現(xiàn)該錯誤,運行時錯誤用運算符 sizeof 可以計算出數(shù)組的容量(字節(jié)數(shù))。 sizeof(p),p 為指針得到的是一個指針變量的字節(jié)數(shù),而不是 p 所指的內(nèi)存容量。C+函數(shù)中值的傳遞方式有三種方式:值傳遞、指針傳遞、引用傳遞內(nèi)存的分配方式分配方式有三種,1、 靜態(tài)存儲區(qū),是在程序編譯時就已經(jīng)分配好的,在整個運行期間都存在,如全局變量、常量。2、 棧上分配,函數(shù)內(nèi)的局部變量就是從這分配的,但分配的內(nèi)存容易有限。3、 堆上

17、分配,也稱動態(tài)分配,如我們用 new,malloc 分配內(nèi)存,用 delete,free 來釋放的內(nèi)存。66.extern “有C”什么作用?Extern “是C由”提供的一個連接交換指定符號,用于告訴這段代碼是函數(shù)。這是因為 C+編譯后庫中函數(shù)名會變得很長,與 C 生成的不一10/29致,造成不能直接調(diào)用 C函數(shù),加上 extren “后c”, C+就能直接調(diào)用 C 函數(shù)了。Extern “主C要”使用正規(guī) DLL函數(shù)的引用和導出 和 在 C+包含 C函數(shù)或 C 頭文件時使用。使用時在前面加上 extern “c關”鍵字即可。用什么函數(shù)開啟新進程、線程。答案:線程: CreateThread

18、/AfxBeginThread等進程: CreateProcess等SendMessage和 PostMessage有什么區(qū)別答案: SendMessage是阻塞的,等消息被處理后,代碼才能走到SendMessage的下一行。 PostMessage是非阻塞的,不管消息是否已被處理,代碼馬上走到 PostMessage的下一行。CMemoryState 主要功能是什么答案:查看內(nèi)存使用情況,解決內(nèi)存泄露問題。70.6、#include 和 #include“ filename有.h什么”區(qū)別?答:對于 #include ,編譯器從標準庫路徑開始搜索filename.h對于 #include“f

19、ilename.h,編”譯器從用戶的工作路徑開始搜索filename.h處理器標識 #error 的目的是什么?答:編譯時輸出一條錯誤信息,并中止繼續(xù)編譯。72.#if!defined(AFX_ _HADE_H)#define(AFX_ _HADE_H)11/29#endif 作用?防止該頭文件被重復引用。在定義一個宏的時候要注意什么?定義部分的每個形參和整個表達式都必須用括號括起來,以避免不可預料的錯誤發(fā)生數(shù)組在做函數(shù)實參的時候會轉變?yōu)槭裁搭愋???shù)組在做實參時會變成指針類型。系統(tǒng)會自動打開和關閉的 3 個標準的文件是?標準輸入 -鍵盤 -stdin標準輸出 -顯示器 -stdout標準出錯輸

20、出 -顯示器 -stderr76.在 Win32 下 char, int, float, double 各占多少位?Char 占用 8 位Int 占用 32 位Float 占用 32 位Double 占用 64 位strcpy()和 memcpy()的區(qū)別?strcpy()和 memcpy()都可以用來拷貝字符串, strcpy()拷貝以 0結束,但memcpy()必須指定拷貝的長度。78.說明 define 和 const 在語法和含義上有什么不同?12/29#define 是 C 語法中定義符號變量的方法,符號常量只是用來表達一個值,在編譯階段符號就被值替換了,它沒有類型;Const 是

21、C+語法中定義常變量的方法,常變量具有變量特性,它具有類型,內(nèi)存中存在以它命名的存儲單元,可以用 sizeof 測出長度。說出字符常量和字符串常量的區(qū)別,并使用運算符sizeof 計算有什么不用?字符常量是指單個字符,字符串常量以 0結束,使用運算符 sizeof 計算多占一字節(jié)的存儲空間。簡述全局變量的優(yōu)缺點?全局變量也稱為外部變量,它是在函數(shù)外部定義的變量,它屬于一個源程序文件,它保存上一次被修改后的值,便于數(shù)據(jù)共享,但不方便管理,易引起意想不到的錯誤。81.總結 static 的應用和作用?( 1)函數(shù)體內(nèi) static 變量的作用范圍為該函數(shù)體,不同于 auto 變量,該變量的內(nèi)存只被

22、分配一次,因此其值在下次調(diào)用時仍維持上次的值;2)在模塊內(nèi)的 static 全局變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問;3)在模塊內(nèi)的 static 函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個函數(shù)的使用范圍被限制在聲明它的模塊內(nèi);4)在類中的 static 成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝;( 5)在類中的 static 成員函數(shù)屬于整個類所擁有,這個函數(shù)不接收 this 指針,因而只能訪問類的 static 成員變量。82.總結 const 的應用和作用?13/29( 1)欲阻止一個變量被改變,可以使用 const 關鍵字。在定義該 const 變量時,通

23、常需要對它進行初始化,因為以后就沒有機會再去改變它了;2)對指針來說,可以指定指針本身為 const,也可以指定指針所指的數(shù)據(jù)為 const,或二者同時指定為 const;3)在一個函數(shù)聲明中, const 可以修飾形參,表明它是一個輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值;4)對于類的成員函數(shù),若指定其為 const 類型,則表明其是一個常函數(shù),不能修改類的成員變量;5)對于類的成員函數(shù),有時候必須指定其返回值為 const 類型,以使得其返回值不為 “左值”。什么是指針?談談你對指針的理解?指針是一個變量,該變量專門存放內(nèi)存地址;指針變量的類型取決于其指向的數(shù)據(jù)類型,在所指數(shù)據(jù)類型前加*指針變量的

24、特點是它可以訪問所指向的內(nèi)存。什么是常指針,什么是指向常變量的指針?常指針的含義是該指針所指向的地址不能變,但該地址所指向的內(nèi)容可以變化,使用常指針可以保證我們的指針不能指向其它的變量,指向常變量的指針是指該指針的變量本身的地址可以變化,可以指向其它的變量,但是它所指的內(nèi)容不可以被修改。指向長變量的指針定義,函數(shù)指針和指針函數(shù)的區(qū)別?函數(shù)指針是指指向一個函數(shù)入口的指針;指針函數(shù)是指函數(shù)的返回值是一個指針類型。簡述 Debug 版本和 Release版本的區(qū)別?14/29Debug 版本是調(diào)試版本, Release版本是發(fā)布給用戶的最終非調(diào)試的版本,指針的幾種典型應用情況?int *pn;- 指

25、針數(shù)組,每個元素均為指向整型數(shù)據(jù)的指針。int (*)pn;-p 為指向一維數(shù)組的指針,這個一維數(shù)組有n 個整型數(shù)據(jù)。int *p();- 函數(shù)帶回指針,指針指向返回的值。int (*)p();-p 為指向函數(shù)的指針。static 函數(shù)與普通函數(shù)有什么區(qū)別 ?static 函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個被調(diào)用中維持一份拷貝struct(結構 ) 和 union(聯(lián)合 )的區(qū)別?結構和聯(lián)合都是由多個不同的數(shù)據(jù)類型成員組成 , 但在任何同一時刻 , 聯(lián)合中只存放了一個被選中的成員(所有成員共用一塊地址空間) , 而結構的所有成員都存在(不同成員的存放地址不同)。對于聯(lián)合的不同成員賦值 , 將

26、會對其它成員重寫 , 原來成員的值就不存在了 , 而對于結構的不同成員賦值是互不影響的。class 和 struct 的區(qū)別?struct 的成員默認是公有的,而類的成員默認是私有的。簡述枚舉類型?枚舉方便一次定義一組常量,使用起來很方便;assert()的作用?ASSERT()是一個調(diào)試程序時經(jīng)常使用的宏,在程序運行時它計算括號內(nèi)的表達式,如果表達式為 FALSE (0),程序將報告錯誤,并終止執(zhí)行。如果表達式不為0,則繼續(xù)執(zhí)行后面的語句。這個宏通常原來判斷程序中是否出現(xiàn)了明顯非法的數(shù)據(jù),如果出現(xiàn)了終止程序以免導致嚴重后果,同時也便于查找錯誤。15/29局部變量和全局變量是否可以同名?能,局

27、部會屏蔽全局。要用全局變量,需要使用 :( 域運算符 )。程序的局部變量存在于(堆棧)中,全局變量存在于(靜態(tài)區(qū) )中,動態(tài)申請數(shù)據(jù)存在于( 堆)中。在什么時候使用常引用?如果既要利用引用提高程序的效率,又要保護傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變,就應使用常引用。類的聲明和實現(xiàn)的分開的好處?起保護作用;提高編譯的效率。windows 消息系統(tǒng)由哪幾部分構成?由一下 3 部分組成:消息隊列:操作系統(tǒng)負責為進程維護一個消息隊列,程序運行時不斷從該消息隊列中獲取消息、處理消息;消息循環(huán):應用程序通過消息循環(huán)不斷獲取消息、處理消息。消息處理:消息循環(huán)負責將消息派發(fā)到相關的窗口上使用關聯(lián)的窗口過程函數(shù)進行

28、處理。什么是消息映射?消息映射就是讓程序員指定 MFC類(有消息處理能力的類)處理某個消息。然后由程序員完成對該處理函數(shù)的編寫,以實現(xiàn)消息處理功能。什么是 UDP和 TCP的區(qū)別是什么?TCP的全稱為傳輸控制協(xié)議。這種協(xié)議可以提供面向連接的、可靠的、點到點的通信。16/29UDP 全稱為用戶報文協(xié)議,它可以提供非連接的不可靠的點到多點的通信。用 TCP還是 UDP,那要看你的程序注重哪一個方面?可靠還是快速?winsock 建立連接的主要實現(xiàn)步驟 ?答:服務器端: socket()建立套接字,綁定( bind)并監(jiān)聽( listen),用 accept()等待客戶端連接 , accept()發(fā)

29、現(xiàn)有客戶端連接,建立一個新的套接字,自身重新開始等待連接。該新產(chǎn)生的套接字使用send()和 recv()寫讀數(shù)據(jù),直至數(shù)據(jù)交換完畢, closesocket()關閉套接字??蛻舳耍?socket()建立套接字,連接( connect)服務器,連接上后使用send()和 recv(),在套接字上寫讀數(shù)據(jù),直至數(shù)據(jù)交換完畢,closesocket()關閉套接字。進程間主要的通訊方式?信號量,管道,消息,共享內(nèi)存構成 Win32 API 函數(shù)的三個動態(tài)鏈接庫是什么?答:內(nèi)核庫,用戶界面管理庫,圖形設備界面庫。創(chuàng)建一個窗口的步驟是?答:填充一個窗口類結構 -注冊這個窗口類 -然后再創(chuàng)建窗口 -顯示窗

30、口 - 更新窗口。模態(tài)對話框和非模態(tài)對話框有什么區(qū)別?答: 1.調(diào)用規(guī)則不同:前者是用 DoModal()調(diào)用,后者通過屬性和ShowWindow()來顯示。2模態(tài)對話框在沒有關閉前用戶不能進行其他操作,而非模態(tài)對話框可以。17/293非模態(tài)對話框創(chuàng)建時必須編寫自己的共有構造函數(shù),還要調(diào)用Create()函數(shù)。從 EDIT框中取出數(shù)據(jù)給關聯(lián)的變量,已經(jīng)把關聯(lián)的變量的數(shù)據(jù)顯示在 EDIT框上的函數(shù)是什么?答: UpdateData(TRUE), Updatedata(FALSE).簡單介紹 GDI?答; GDI是 Graphics Device Interface 的縮寫,譯為:圖形設備接口;是

31、一個在 Windows 應用程序中執(zhí)行與設備無關的函數(shù)庫,這些函數(shù)在不同的輸出設備上產(chǎn)生圖形以及文字輸出。windows 消息分為幾類?并對各類做簡單描述。1.窗口消息:與窗口相關的消息,除 WM_COMMAND 之外的所有以 WM_開頭的消息;2.命令消息;用于處理用戶請求,以WM_COMMAND 表示的消息;3.控件通知消息:統(tǒng)一由WM_NOTIFT表示,4.用戶自定義消息。如何自定義消息?使用 WM_USER 和 WM_APP 兩個宏來自定義消息,110.簡述 Visual C+ 、Win32 API和 MFC之間的關系?Visual C+是一個以 C+程序設計語言為基礎的、集成的、可視

32、化的編程環(huán)境;Win32 API是 32 位 Windows 操作系以 C/C+形式提供的一組應用程序接口;MFC是對 Win32 API的封裝,簡化了開發(fā)過程。18/29111.怎樣消除多重繼承中的二義性?1成員限定符2虛基類什么叫靜態(tài)關聯(lián),什么叫動態(tài)關聯(lián)在多態(tài)中,如果程序在編譯階段就能確定實際執(zhí)行動作,則稱靜態(tài)關聯(lián),如果等到程序運行才能確定叫動態(tài)關聯(lián)。多態(tài)的兩個必要條件1.一個基類的指針或引用指向一個派生類對象,2.虛函數(shù)114.什么叫智能指針?當一個類中,存在一個指向另一個類對象的指針時,對指針運算符進行重載,那么當前類對象可以通過指針像調(diào)用自身成員一樣調(diào)用另一個類的成員。115.什么時

33、候需要用虛析構函數(shù)?當基類指針指向用 new 運算符生成的派生類對象時, delete 基類指針時,派生類部分沒有釋放掉而造成釋放不徹底現(xiàn)象,需要虛析構函數(shù)。MFC中,大部分類是從哪個類繼承而來 ?CObject117.什么是平衡二叉樹?答:左右子樹都是平衡二叉樹,而且左右子樹的深度差值的約對值不大于1118.語句 for( ;1 ;)有什么問題?它是什么意思?答:無限循環(huán),和while(1)相同。19/299派生新類的過程要經(jīng)歷三個步驟吸收基類成員2.改造基類成員3.添加新成員TCP/IP 建立連接的過程在 TCP/IP協(xié)議中, TCP協(xié)議提供可靠的連接服務,采用三次握手建立一個連接。第一次

34、握手:建立連接時,客戶端發(fā)送連接請求到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;第二次握手:服務器收到客戶端連接請求,向客戶端發(fā)送允許連接應答,此時服務器進入 SYN_RECV狀態(tài);第三次握手:客戶端收到服務器的允許連接應答,向服務器發(fā)送確認,客戶端和服務器進入通信狀態(tài),完成三次握手122. .memset ,memcpy 的區(qū)別memset 用來對一段內(nèi)存空間全部設置為某個字符,一般用在對定義的字符串進行初始化為 0 。memcpy 用來做內(nèi)存拷貝,你可以拿它拷貝任何數(shù)據(jù)類型的對象,可以指定拷貝的數(shù)據(jù)長度;123. 在 C+ 程序中調(diào)用被 C 編譯器編譯后的函數(shù),為什么要加 ext

35、ern “ C?”答: C+語言支持函數(shù)重載, C 語言不支持函數(shù)重載。函數(shù)被 C+編譯后在庫中的名字20/29與 C 語言的不同。假設某個函數(shù)的原型為:void foo(int x, int y);該函數(shù)被 C編譯器編譯后在庫中的名字為 _foo , 而 C+編譯器則會產(chǎn)生像 _foo_int_int 之類的名字。 C+提供了 C 連接交換指定符號 extern “C來”解決名字匹配問題。怎樣定義一個純虛函數(shù)?含有純虛函數(shù)的類稱為什么?在虛函數(shù)的后面加 =0,含有虛函數(shù)的類稱為抽象類。7類成員函數(shù)的重載、覆蓋和隱藏區(qū)別答案:成員函數(shù)被重載的特征:1)相同的范圍(在同一個類中);2)函數(shù)名字相

36、同;3)參數(shù)不同;4)virtual 關鍵字可有可無。覆蓋是指派生類函數(shù)覆蓋基類函數(shù),特征是:1)不同的范圍(分別位于派生類與基類);2)函數(shù)名字相同;3)參數(shù)相同;4)基類函數(shù)必須有 virtual 關鍵字?!半[藏 ”是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù),規(guī)則如下:1)如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時,不論有無 virtual 關鍵字,基類的函數(shù)將被隱藏(注意別與重載混淆)。2)如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒有 virtual 關鍵字。此時,基類的函數(shù)被隱藏(注意別與覆蓋混淆)21/298如何打印出當前源文件的文件名以及源文件的當前行

37、號?答案:cout _FILE_ ;cout_LINE_ ;_FILE_和_LINE_是系統(tǒng)預定義宏,這種宏并不是在某個文件中定義的,而是由編譯器定義的。將“引用 ”作為函數(shù)參數(shù)有哪些特點?1)傳遞引用給函數(shù)與傳遞指針的效果是一樣的。這時,被調(diào)函數(shù)的形參就成為原來主調(diào)函數(shù)中的實參變量或對象的一個別名來使用,所以在被調(diào)函數(shù)中對形參變量的操作就是對其相應的目標對象(在主調(diào)函數(shù)中)的操作。2)使用引用傳遞函數(shù)的參數(shù),在內(nèi)存中并沒有產(chǎn)生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數(shù)的參數(shù),當發(fā)生函數(shù)調(diào)用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調(diào)用拷貝構造函數(shù)

38、。因此,當參數(shù)傳遞的數(shù)據(jù)較大時,用引用比用一般變量傳遞參數(shù)的效率和所占空間都好。3)使用指針作為函數(shù)的參數(shù)雖然也能達到與使用引用的效果,但是,在被調(diào)函數(shù)中同樣要給形參分配存儲單元,且需要重復使用 * 指針變量名 的形式進行運算,這很容易產(chǎn)生錯誤且程序的閱讀性較差;另一方面,在主調(diào)函數(shù)的調(diào)用點處,必須用變量的地址作為實參。而引用更容易使用,更清晰。什么時候需要 “引用 ”?流操作符( )和賦值操作符( =)的返回值、拷貝構造函數(shù)的參數(shù)、賦值操作符的參數(shù)、其它情況都推薦使用引用。135.面向對象的三個基本特征,并簡單敘述之?封裝:將客觀事物抽象成類,每個類對自身的數(shù)據(jù)和方法實行protection

39、(private, protected,public)22/29繼承:廣義的繼承有三種實現(xiàn)形式:實現(xiàn)繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現(xiàn)代碼)、接口繼承(僅使用屬性和方法,實現(xiàn)滯后到子類實現(xiàn))。前兩種(類繼承)和后一種(對象組合 =接口繼承以及純虛函數(shù))構成了功能復用的兩種方式。多態(tài):是將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之后,父對象就可以根據(jù)當前賦值給它的子對象的特性以不同的方式運作。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。140.一個單向鏈表,不知道頭節(jié)點 ,一個指針指向其中的一個節(jié)點,問如何

40、刪除這個指針指向的節(jié)點?將這個指針指向的 next 節(jié)點值 copy 到本節(jié)點,將 next 指向 next-next,并隨后刪除原 next 指向的節(jié)點。7、strcat 能把 strSrc 的內(nèi)容連接到 strDest,為什么還要 char * 類型的返回值?答:方便賦值給其他變量8、MFC中 CString是類型安全類么?答:不是,其它數(shù)據(jù)類型轉換到 CString可以使用 CString的成員函數(shù) Format 來轉換159.C+中什么數(shù)據(jù)分配在?;蚨阎校看穑簵?: 存放局部變量,函數(shù)調(diào)用參數(shù) ,函數(shù)返回值,函數(shù)返回地址。由系統(tǒng)管理堆 : 程序運行時動態(tài)申請, new 和 malloc

41、 申請的內(nèi)存就在堆上0、函數(shù)模板與類模板有什么區(qū)別?答:函數(shù)模板的實例化是由編譯程序在處理函數(shù)調(diào)用時自動完成的,而類模板的實例化23/29必須由程序員在程序中顯式地指定。1、 int i=10, j=10, k=3; k*=i+j; k最后的值是?答: 60,此題考察優(yōu)先級,實際寫成:k*=(i+j);,賦值運算符優(yōu)先級最低2、do while和 while 有do什么區(qū)別?答 、前一個循環(huán)一遍再判斷,后一個判斷以后再循環(huán)頭文件的作用是什么 ?答一、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準)向用戶公布,只要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調(diào)用庫

42、功能,而不必關心接口怎么實現(xiàn)的。編譯器會從庫中提取相應的代碼。二、頭文件能加強類型安全檢查。如果某個接口被實現(xiàn)或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)則能大大減輕程序員調(diào)試、改錯的負擔。206.C和 C+有什么不同 ?從機制上: c 是面向過程的(但 c 也可以編寫面向對象的程序); c+是面向對象的,提供了類。但是, c+編寫面向對象的程序比 c 容易從適用的方向: c 適合要求代碼體積小的,效率高的場合,如嵌入式; c+ 適合更上層的,復雜的; llinux 核心大部分是 c 寫的,因為它是系統(tǒng)軟件,效率要求極高。從名稱上也可以看出, c+比 c 多了 +

43、,說明 c+是 c 的超集;那為什么不叫c+而叫 c+呢,是因為 c+比c 來說擴充的東西太多了,所以就在c 后面放上兩個 +;于是就成了 c+C 語言是結構化編程語言, C+是面向對象編程語言。 LUPA開源社區(qū) n*r2C/M8f24/29C+側重于對象而不是過程,側重于類的設計而不是邏輯的設計。8動態(tài)連接庫的兩種方式?答:調(diào)用一個DLL中的函數(shù)有兩種方法:1載入時動態(tài)鏈接( load-time dynamic linking),模塊非常明確調(diào)用某個導出函數(shù),使得他們就像本地函數(shù)一樣。這需要鏈接時鏈接那些函數(shù)所在 DLL 的導入庫,導入庫向系統(tǒng)提供了載入 DLL時所需的信息及 DLL函數(shù)定

44、位。2運行時動態(tài)鏈接( run-time dynamic linking),運行時可以通過LoadLibrary或 LoadLibraryEx函數(shù)載入 DLL。DLL載入后,模塊可以通過調(diào)用GetProcAddress獲取 DLL函數(shù)的出口地址,然后就可以通過返回的函數(shù)指針調(diào)用DLL函數(shù)了。如此即可避免導入庫文件了。引“用 ”與多態(tài)的關系?引用是除指針外另一個可以產(chǎn)生多態(tài)效果的手段。這意味著,一個基類的引用可以指向它的派生類實例。四、 棧的表示和實現(xiàn)順序棧順序棧是用順序存儲結構實現(xiàn)的棧,即利用一組地址連續(xù)的存儲單元依次存放自棧底到棧頂?shù)臄?shù)據(jù)元素,同時由于棧的操作的特殊性, 還必須附設一個位置指

45、針 top(棧頂指針)來動態(tài)地指示棧頂元素在順序棧中的位置。通常以top=0 或 top=-1 表示空棧。順序棧的存儲結構可以用 C語言中的一維數(shù)組來表示。 棧的順序存儲結構定義如下:define STACK_INIT_SIZE 100 / 存儲空間初始分配量define STACKINCREMENT 10/ 存儲空間分配增量typedef struct25/29 SElemType *base;/ 在棧構造前和銷毀后base 值為 NULLSElemType *top;/ 棧頂指針int stacksize; SqStack; /當前已分配存儲空間或簡單定義如下:define M 100 i

46、nt sM;int top;初態(tài): top=0;空棧,棧中無元素,進棧: stop=x;top=top+1;退棧: top=top-1; 取 stop;棧滿: top=M; 棧溢出(上益),不能再進棧(錯誤狀態(tài))top=0 時不能退棧,下益(正常狀態(tài),常作控制條件)2.順序?;静僮鞯膶崿F(xiàn)如下:( 1)構造空順序棧算法 :初始化棧Status InitStack ( SqStack &S ) 構造一個空棧 SS.base = ( SElemType * ) malloc ( STACK_INIT_SIZE * sizeof ( SElemType ) );if ( ! S.base ) exit ( OVERFLOW ); /為棧分配存儲空間失敗S.top = S.base; / 令棧頂指針= 棧底指針S.stacksize = STACK_INIT_SIZE;設/置棧的當前可使用的最大容量return OK;26/29 / InitStack程序描述:/This program is to initialize a stackinclude include include d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論