


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1. 面向對象的程序設計思想是什么? 答:把數據結構和對數據結構進行操作的方法封裝形成一個個的對象。2. 什么是類? 答:把一些具有共性的對象歸類后形成一個集合,也就是所謂的類。3. 對象都具有的二方面特征是什么?分別是什么含義? 答:對象都具有的特征是:靜態特征和動態特征。 靜態特征是指能描述對象的一些屬性,動態特征是指對象表現出來的行為4. 在頭文件中進行類的聲明,在對應的實現文件中進行類的定義有什么意義? 答:這樣可以提高編譯效率,因為分開的話只需要編譯一次生成對應的 .obj 文件后,再次 應用該類的地方,這個類就不會被再次編譯,從而大大提高了效率。5. 在類的部定義成員函數的函數體,
2、這種函數會具備那種屬性? 答:這種函數會自動為聯函數,這種函數在函數調用的地方在編譯階段都會進行代碼替換。6. 成員函數通過什么來區分不同對象的成員數據?為什么它能夠區分? 答:通過 this 指針來區分的, 因為它指向的是對象的首地址。7. C+編譯器自動為類產生的四個缺省函數是什么? 答:默認構造函數,拷貝構造函數,析構函數,賦值函數。8. 拷貝構造函數在哪幾種情況下會被調用?答: 1. 當類的一個對象去初始化該類的另一個對象時;2. 如果函數的形參是類的對象,調用函數進行形參和實參結合時;3. 如果函數的返回值是類對象,函數調用完成返回時。9. 構造函數與普通函數相比在形式上有什么不同?
3、 (構造函數的作用, 它的聲明形式來分 析)答:構造函數是類的一種特殊成員函數, 一般情況下, 它是專門用來初始化對象成員變量的。 構造函數的名字必須與類名相同,它不具有任何類型,不返回任何值。10. 什么時候必須重寫拷貝構造函數? 答:當構造函數涉及到動態存儲分配空間時,要自己寫拷貝構造函數,并且要深拷貝。11. 構造函數的調用順序是什么?答: 1. 先調用基類構造函數2. 按聲明順序初始化數據成員3. 最后調用自己的構造函數。12. 哪幾種情況必須用到初始化成員列表? 答:類的成員是常量成員初始化;類的成員是對象成員初始化,而該對象沒有無參構造函數。 類的成員為引用時。13. 什么是常對象
4、?答:常對象是指在任何場合都不能對其成員的值進行修改的對象。14. 靜態函數存在的意義? 答:靜態私有成員在類外不能被訪問,可通過類的靜態成員函數來訪問; 當類的構造函數是私有的時, 不像普通類那樣實例化自己, 只能通過靜態成員函數來調用構 造函數。15. 在類外有什么辦法可以訪問類的非公有成員? 答:友元,繼承,公有成員函數。16. 什么叫抽象類? 答:不用來定義對象而只作為一種基本類型用作繼承的類。17. 運算符重載的意義? 答:為了對用戶自定義數據類型的數據的操作與定義的數據類型的數據的操作形式一致。18. 不允許重載的 5 個運算符是哪些? 答:1. .* (成員指針訪問運算符號)2.
5、 :域運算符3. Sizeof 長度運算符號4. ?:條件運算符號5. . (成員訪問符)19. 運算符重載的三種方式? 答:普通函數,友元函數,類成員函數。20. 流運算符為什么不能通過類的成員函數重載?一般怎么解決? 答:因為通過類的成員函數重載必須是運算符的第一個是自己, 而對流運算的重載要求第 個參數是流對象。一般通過友元來解決。21. 賦值運算符和拷貝構造函數的區別與聯系? 答:相同點:都是將一個對象 copy 到另一個中去。 不同點:拷貝構造函數涉及到要新建立一個對象。22. 在哪種情況下要調用該類的析構函數? 答:對象生命周期結束時。23. 對象間是怎樣實現數據的共享的?答:通過
6、類的靜態成員變量來實現的。 靜態成員變量占有自己獨立的空間不為某個對象所私有。24. 友元關系有什么特性? 答:單向的,非傳遞的,不能繼承的。25. 對對象成員進行初始化的次序是什么? 答:它的次序完全不受它們在初始化表中次序的影響, 只有成員對象在類中聲明的次序來決 定的。26. 答:類和對象之間的關系是什么? 類是對象的抽象,對象是類的實例。27. 答:對類的成員的訪問屬性有什么? public , protected , private 。28. const char *p,char * const p;的區別如果 const 位于星號的左側, 則 const 就是用來修飾指針所指向的變
7、量, 即指針指向為常量; 如果 const 位于星號的右側, const 就是修飾指針本身,即指針本身是常量。29. 是不是一個父類寫了一個 virtual 函數,如果子類覆蓋它的函數不加 virtual , 也能實 現多態 ?virtual 修飾符會被隱形繼承的。virtual 可加可不加 , 子類覆蓋它的函數不加 virtual , 也能實現多態。30. 函數重載是什么意思?它與虛函數的概念有什么區別? 函數重載是一個同名函數完成不同的功能, 編譯系統在編譯階段通過函數參數個數、 參數類 型不同,函數的返回值來區分該調用哪一個函數, 即實現的是靜態的多態性。但是記住:不 能僅僅通過函數返回
8、值不同來實現函數重載。而虛函數實現的是在基類過使用關鍵字 virtual 來申明一個函數為虛函數, 含義就是該函數的功能可能在將來的派生類中定義或者 在基類的基礎之上進行擴展, 系統只能在運行階段才能動態決定該調用哪一個函數, 所以實 現的是動態的多態性。它體現的是一個縱向的概念,也即在基類和派生類間實現。31. 構造函數和析構函數是否可以被重載 , 為什么 ?答:構造函數可以被重載, 析構函數不可以被重載。 因為構造函數可以有多個且可以帶參數, 而析構函數只能有一個,且不能帶參數。32. 如何定義和實現一個類的成員函數為回調函數?答: 所謂的回調函數,就是預先在系統的對函數進行注冊,讓系統知
9、道這個函數的存在,以后, 當某個事件發生時,再調用這個函數對事件進行響應。定義一個類的成員函數時在該函數前加CALLBACK將其定義為回調函數,函數的實現和普通成員函數沒有區別33. 虛函數是怎么實現的?答:簡單說來使用了虛函數表34. 抽象類不會產生實例,所以不需要有構造函數。 錯35. 從一個模板類可以派生新的模板類,也可以派生非模板類。 對36. main 函數執行以前,還會執行什么代碼? 答案:全局對象的構造函數會在 main 函數之前執行。37. 當一個類 A 中沒有生命任何成員變量與成員函數 , 這時 sizeof(A) 的值是多少,如果不 是零,請解釋一下編譯器為什么沒有讓它為零
10、。( Autodesk )答案:肯定不是零。舉個反例,如果是零的話,聲明一個 class A10 對象數組,而每一個 對象占用的空間是零,這時就沒辦法區分A0,A1了。38. delete 與 delete 區別:delete 只會調用一次析構函數,而 delete 會調用每一個成員的析構函數。199. 子類析構時要調用父類的析構函數嗎?會調用,析構函數調用的次序是先派生類的析構后基類的析構, 也就是說在基類的的析構調用的時候 派生類的信息已經全部銷毀了40. . 繼承優缺點。1、類繼承是在編譯時刻靜態定義的,且可直接使用,2、類繼承可以較方便地改變父類的實現。缺點:1、因為繼承在編譯時刻就定
11、義了,所以無法在運行時刻改變從父類繼承的實現2、父類通常至少定義了子類的部分行為,父類的任何改變都可能影響子類的行為3、如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。 這種依賴關系限制了靈活性并最終限制了復用性。41. 解釋堆和棧的區別。棧區( stack ) 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。堆:一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。42. 一個類的構造函數和析構函數什么時候被調用 , 是否需要手工調用 ? 答:構造函數在創建類對象的時候被自動調用, 析構函數在類對象生命期結束時, 由系統自 動調用。43. 何時
12、需要預編譯: 總是使用不經常改動的大型代碼體。程序由多個模塊組成, 所有模塊都使用一組標準的包含文件和相同的編譯選項。 在這種情況 下,可以將所有包含文件預編譯為一個預編譯頭。44. 多態的作用?主要是兩個:1. 隱藏實現細節,使得代碼能夠模塊化;擴展代碼模塊,實現代碼重用;2. 接口重用:為了類在繼承和派生的時候,保證使用家族中任一類的實例的某一屬性時的 正確調用45. 虛擬函數與普通成員函數的區別?聯函數和構造函數能否為虛擬函數?答案: 區別:虛擬函數有 virtual 關鍵字, 有虛擬指針和虛函數表, 虛擬指針就是虛擬函數 的接口,而普通成員函數沒有。聯函數和構造函數不能為虛擬函數。46
13、. 構造函數和析構函數的調用順序 ? 析構函數為什么要虛擬 ?答案: 構造函數的調用順序: 基類構造函數對象成員構造函數派生類構造函數; 析構函 數的調用順序與構造函數相反。析構函數虛擬是為了防止析構不徹底,造成存的泄漏。47. .C+ 中類型為 private 的成員變量可以由哪些函數訪問 ? 只可以由本類中的成員函數和友員函數訪問48. 請說出類中 private , protect , public 三種訪問限制類型的區別private 是私有類型, 只有本類中的成員函數訪問 ;protect 是保護型的, 本類和繼承類可以 訪問 ;public 是公有類型,任何類都可以訪問 .49.
14、類中成員變量怎么進行初始化? 可以通過構造函數的初始化列表或構造函數的函數體實現。50. 在什么時候需要使用“常引用”? 如果既要利用引用提高程序的效率, 又要保護傳遞給函數的數據不在函數中被改變, 就應使 用常引用。51. 引用與指針有什么區別?答 、 1) 引用必須被初始化,指針不必。2) 引用初始化以后不能被改變,指針可以改變所指的對象。3) 不存在指向空值的引用,但是存在指向空值的指針。52. 描述實時系統的基本特性答 、在特定時間完成特定的任務,實時性與可靠性。54. 全局變量和局部變量在存中是否有區別?如果有,是什么區別?答 、全局變量儲存在靜態數據區,局部變量在堆棧中。55. 堆
15、棧溢出一般是由什么原因導致的?答 、沒有回收垃圾資源56. 什么函數不能聲明為虛函數?答 構造函數( constructor )57. .IP 地址的編碼分為哪倆部分? 答 IP 地址由兩部分組成,網絡號和主機號。58. . 不能做 switch() 的參數類型是:答 、 switch 的參數不能為實型。59. 如何引用一個已經定義過的全局變量?答 、可以用引用頭文件的方式, 也可以用 extern 關鍵字, 如果用引用頭文件方式來引用某 個在頭文件中聲明的全局變理, 假定你將那個變寫錯了, 那么在編譯期間會報錯, 如果你用 extern 方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報
16、錯,而在連接期間報錯60. 對于一個頻繁使用的短小函數,在C語言中應用什么實現,在C+中應用什么實現?答、c用宏定義,C+用inlineNm61. C+ 是不是類型安全的?答案:不是。兩個不同類型的指針之間可以強制轉換(用reinterpret cast)62. 當一個類 A 中沒有生命任何成員變量與成員函數 , 這時 sizeof(A) 的值是多少,請解釋 一下編譯器為什么沒有讓它為零。答案:為 1。舉個反例,如果是零的話,聲明一個class A10 對象數組,而每一個對象占用的空間是零,這時就沒辦法區分A0,A1了。63. 簡述數組與指針的區別? 數組要么在靜態存儲區被創建(如全局數組)
17、,要么在棧上被創建。指針可以隨時指向任意 類型的存塊。(1) 修改容上的區別char a =“ hello ” ;a0 = X'char *p = “world ”; /注意 p 指向常量字符串p0 = X' /編譯器不能發現該錯誤,運行時錯誤(2) 用運算符 sizeof 可以計算出數組的容量(字節數) 。 sizeof(p),p 為指針得到的是一 個指針變量的字節數,而不是 p 所指的存容量。64. C+ 函數中值的傳遞方式有三種方式:值傳遞、指針傳遞、引用傳遞65. 存的分配方式 分配方式有三種,1 、 靜態存儲區,是在程序編譯時就已經分配好的,在整個運行期間都存在,如全
18、局變量、 常量。2、棧上分配,函數的局部變量就是從這分配的,但分配的存容易有限。3、堆上分配, 也稱動態分配, 如我們用 new,malloc 分配存, 用 delete,free 來釋放的存。66. exter n“ C”有什么作用?Extern “ C”是由C + +提供的一個連接交換指定符號,用于告訴C + +這段代碼是C函數。這是因為C+編譯后庫中函數名會變得很長,與 C生成的不一致,造成C + +不能直接調用 C函數,加上extren “c”后,C+就能直接調用 C函數了。Extern “C”主要使用正規 DLL函數的引用和導出和在C+包含C函數或C頭文件時使用。使用時在前面加上 e
19、xtern“c” 關鍵字即可。67. 用什么函數開啟新進程、線程。答案:線程: CreateThread/AfxBeginThread 等進程: CreateProcess 等68. SendMessage 和 PostMessage 有什么區別SendMessage 的下一行。PostMessage 的下一行。答案: SendMessage 是阻塞的,等消息被處理后,代碼才能走到PostMessage 是非阻塞的,不管消息是否已被處理,代碼馬上走到69. CMemoryState 主要功能是什么答案:查看存使用情況,解決存泄露問題。70. 26 、 #in clude <filenam
20、e.h>和 #include “ filename.h ” 有什么區別?答:對于 #include <filename.h> ,編譯器從標準庫路徑開始搜索 filename.h 對于 #include “filename.h ” ,編譯器從用戶的工作路徑開始搜索 filename.h71. 處理器標識 #error 的目的是什么? 答:編譯時輸出一條錯誤信息,并中止繼續編譯。72. #if!defi ned(AFX_HADE_H)#define(AFX_ _HADE_H)#endif 作用?防止該頭文件被重復引用。73. 在定義一個宏的時候要注意什么?定義部分的每個形參和整個
21、表達式都必須用括號括起來,以避免不可預料的錯誤發生74. 數組在做函數實參的時候會轉變為什么類型? 數組在做實參時會變成指針類型。75. 系統會自動打開和關閉的 3 個標準的文件是?(1) 標準輸入 鍵盤 -stdin(2) 標準輸出 顯示器 -stdout(3) 標準出錯輸出 顯示器 -stderr各占多少位?76. . 在 Win32 下 char, int, float, double(1) Char 占用 8 位(2) Int 占用 32 位(3) Float 占用 32 位(4) Double 占用 64 位77. strcpy() 和 memcpy()的區別?strcpy()和me
22、mcpy()都可以用來拷貝字符串,strcpy() 拷貝以0 '結束,但memcpy()必須指定拷貝的長度。78. 說明 define 和 const 在語法和含義上有什么不同?(1)#define 是C語法中定義符號變量的方法,符號常量只是用來表達一個值,在編譯階段 符號就被值替換了,它沒有類型;(2)Const是C+語法中定義常變量的方法,常變量具有變量特性,它具有類型,存中存在 以它命名的存儲單元,可以用 sizeof 測出長度。79. 說出字符常量和字符串常量的區別,并使用運算符 sizeof 計算有什么不用? 字符常量是指單個字符,字符串常量以 0'結束,使用運算符
23、sizeof 計算多占一字節的 存儲空間。80. 簡述全局變量的優缺點?全局變量也稱為外部變量, 它是在函數外部定義的變量, 它屬于一個源程序文件, 它保存上 一次被修改后的值,便于數據共享,但不方便管理,易引起意想不到的錯誤。81. 總結 static 的應用和作用?(1 )函數體 static 變量的作用圍為該函數體,不同于 auto 變量,該變量的存只被分配一 次,因此其值在下次調用時仍維持上次的值;(2)在模塊的 static 全局變量可以被模塊所用函數訪問,但不能被模塊外其它函數訪問;(3)在模塊的 static 函數只可被這一模塊的其它函數調用, 這個函數的使用圍被限制在聲 明它的
24、模塊;(4)在類中的 static 成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝;(5)在類中的 static 成員函數屬于整個類所擁有,這個函數不接收 this 指針,因而只能 訪問類的 static 成員變量。82. . 總結 const 的應用和作用?(1 )欲阻止一個變量被改變,可以使用 const 關鍵字。在定義該 const 變量時,通常需要 對它進行初始化,因為以后就沒有機會再去改變它了;(2) 對指針來說,可以指定指針本身為const ,也可以指定指針所指的數據為 const ,或二 者同時指定為 const ;(3) 在一個函數聲明中,const 可以修飾形參,表明它
25、是一個輸入參數,在函數部不能改 變其值;(4) 對于類的成員函數,若指定其為const 類型,則表明其是一個常函數,不能修改類的 成員變量;(5)對于類的成員函數, 有時候必須指定其返回值為 const 類型,以使得其返回值不為 “左 值”。83. 什么是指針?談談你對指針的理解? 指針是一個變量,該變量專門存放存地址; 指針變量的類型取決于其指向的數據類型,在所指數據類型前加 * 指針變量的特點是它可以訪問所指向的存。84. 什么是常指針,什么是指向常變量的指針? 常指針的含義是該指針所指向的地址不能變, 但該地址所指向的容可以變化, 使用常指針可 以保證我們的指針不能指向其它的變量, 指向
26、常變量的指針是指該指針的變量本身的地址可以變化, 可以指向其它的變量, 但是它所 指的容不可以被修改。指向長變量的指針定義,85. 函數指針和指針函數的區別? 函數指針是指指向一個函數入口的指針; 指針函數是指函數的返回值是一個指針類型。87. 簡述 Debug 版本和 Release 版本的區別?Debug 版本是調試版本, Release 版本是發布給用戶的最終非調試的版本,88. 指針的幾種典型應用情況?int *pn; 指針數組,每個元素均為指向整型數據的指針。int (*)pn; p 為指向一維數組的指針,這個一維數組有n 個整型數據。int *p(); 函數帶回指針,指針指向返回的
27、值。int (*)p();p 為指向函數的指針。89. static 函數與普通函數有什么區別 ?static 函數在存中只有一份,普通函數在每個被調用中維持一份拷貝90. struct( 結構 ) 和 union( 聯合 ) 的區別?1. 結構和聯合都是由多個不同的數據類型成員組成 , 但在任何同一時刻 , 聯合中只存放了 一個被選中的成員 (所有成員共用一塊地址空間) , 而結構的所有成員都存在 (不同成員的 存放地址不同) 。2. 對于聯合的不同成員賦值 , 將會對其它成員重寫 , 原來成員的值就不存在了 , 而對于 結構的不同成員賦值是互不影響的。91. class 和 struct
28、的區別?struct 的成員默認是公有的,而類的成員默認是私有的。92. 簡述枚舉類型? 枚舉方便一次定義一組常量,使用起來很方便;93. assert() 的作用?ASSERT(是一個調試程序時經常使用的宏,在程序運行時它計算括號的表達式,如果表達式為 FALSE(0), 程序將報告錯誤,并終止執行。如果表達式不為 0,則繼續執行后面的語句。 這個宏通常原來判斷程序中是否出現了明顯非法的數據, 如果出現了終止程序以免導致嚴重 后果,同時也便于查找錯誤。94. 局部變量和全局變量是否可以同名? 能,局部會屏蔽全局。要用全局變量,需要使用 ":"( 域運算符 )。95. 程序
29、的局部變量存在于(堆棧)中,全局變量存在于(靜態區)中,動態申請數據存在于( 堆)中。96. 在什么時候使用常引用?如果既要利用引用提高程序的效率, 又要保護傳遞給函數的數據不在函數中被改變, 就應使 用常引用。97. 類的聲明和實現的分開的好處?1. 起保護作用;2. 提高編譯的效率。98. windows 消息系統由哪幾部分構成?由一下 3 部分組成:1. 消息隊列: 操作系統負責為進程維護一個消息隊列, 程序運行時不斷從該消息隊列中獲 取消息、處理消息;2. 消息循環:應用程序通過消息循環不斷獲取消息、處理消息。3. 消息處理:消息循環負責將消息派發到相關的窗口上使用關聯的窗口過程函數進
30、行處 理。99. 什么是消息映射?消息映射就是讓程序員指定MFC類(有消息處理能力的類)處理某個消息。然后由程序員完成對該處理函數的編寫,以實現消息處理功能。100. 什么是UDF和TCP的區別是什么?TCP的全稱為傳輸控制協議。這種協議可以提供面向連接的、可靠的、點到點的通信。UDP全稱為用戶報文協議,它可以提供非連接的不可靠的點到多點的通信。用TCP還是UDP那要看你的程序注重哪一個方面?可靠還是快速?101. winsock 建立連接的主要實現步驟 ?答:服務器端: socket() 建立套接字,綁定( bind )并監聽( listen ),用 accept ()等待客戶 端連接 ,
31、accept ()發現有客戶端連接,建立一個新的套接字,自身重新開始等待連接。該 新產生的套接字使用 send() 和 recv ()寫讀數據, 直至數據交換完畢, closesocket() 關閉 套接字。客戶端: socket() 建立套接字,連接( connect )服務器,連接上后使用 send() 和 recv (), 在套接字上寫讀數據,直至數據交換完畢, closesocket() 關閉套接字。102. 進程間主要的通訊方式?信號量,管道,消息,共享存103. 構成 Win32 API 函數的三個動態庫是什么?答:核庫,用戶界面管理庫,圖形設備界面庫。104. 創建一個窗口的步驟
32、是?答:填充一個窗口類結構 -> 注冊這個窗口類 ->然后再創建窗口 -> 顯示窗口 ->更新窗口。105. 模態對話框和非模態對話框有什么區別?答:1.調用規則不同:前者是用DoModal()調用,后者通過屬性和 ShowWindow()來顯示。2模態對話框在沒有關閉前用戶不能進行其他操作,而非模態對話框可以。3非模態對話框創建時必須編寫自己的共有構造函數,還要調用Create() 函數。106. 從 EDIT 框中取出數據給關聯的變量, 已經把關聯的變量的數據顯示在EDIT 框上的函數是什么?答: UpdateData(TRUE), Updatedata(FALSE
33、).107. 簡單介紹 GDI?答;GDI是Graphics Device In terface的縮寫,譯為:圖形設備接口;是一個在Win dows應用程序中執行與設備無關的函數庫,這些函數在不同的輸出設備上產生圖形以及文字輸 出。108. windows 消息分為幾類?并對各類做簡單描述。1. 窗口消息:與窗口相關的消息,除WM_COMMA之外的所有以 WM開頭的消息;2. 命令消息;用于處理用戶請求,以WM_COMMA表示的消息;3. 控件通知消息:統一由 WM_NOTIF表示,4. 用戶自定義消息。109. 如何自定義消息?使用 WM_USE和 WM_AP兩個宏來自定義消息,110. 簡
34、述 VisualC+ 、Win32 API 和 MFC之間的關系?(1) Visual C+ 是一個以C+程序設計語言為基礎的、集成的、可視化的編程環境; Win32 API 是32位Windows操作系以C/C+形式提供的一組應用程序接口;(3) MFC 是對 Win32 API 的封裝,簡化了開發過程。111. 怎樣消除多重繼承中的二義性?1 成員限定符2虛基類 112什么叫靜態關聯,什么叫動態關聯 在多態中,如果程序在編譯階段就能確定實際執行動作,則稱靜態關聯, 如果等到程序運行才能確定叫動態關聯。113 多態的兩個必要條件1. 一個基類的指針或引用指向一個派生類對象,2. 虛函數114
35、. 什么叫智能指針?當一個類中, 存在一個指向另一個類對象的指針時, 對指針運算符進行重載, 那么當前類對 象可以通過指針像調用自身成員一樣調用另一個類的成員。115. 什么時候需要用虛析構函數?當基類指針指向用 new 運算符生成的派生類對象時, delete 基類指針時,派生類部分沒有 釋放掉而造成釋放不徹底現象,需要虛析構函數。116. MFC 中,大部分類是從哪個類繼承而來 ?CObject117. 什么是平衡二叉樹? 答:左右子樹都是平衡二叉樹,而且左右子樹的深度差值的約對值不大于 1118. 語句 for( ; 1 ; ) 有什么問題?它是什么意思? 答:無限循環,和 while(
36、1) 相同。119派生新類的過程要經歷三個步驟1 吸收基類成員2. 改造基類成員3. 添加新成員121. TCP/IP 建立連接的過程在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。第一次握手:建立連接時,客戶端發送連接請求到服務器,并進入SYN_SEN狀態,等待服務器確認; 第二次握手:服務器收到客戶端連接請求,向客戶端發送允許連接應答,此時服務器進入SYN_REC狀態;第三次握手: 客戶端收到服務器的允許連接應答, 向服務器發送確認, 客戶端和服務器進入 通信狀態,完成三次握手122. .memset ,memcpy 的區別memset 用來對一段存空間全部設
37、置為某個字符,一般用在對定義的字符串進行初始化為 '0' 。memcpy用來做存拷貝,你可以拿它拷貝任何數據類型的對象,可以指定拷貝的數據長度;123. 在 C+ 程序中調用被 C 編譯器編譯后的函數,為什么要加 extern “C”?答:C+語言支持函數重載,C語言不支持函數重載。函數被C+編譯后在庫中的名字與 C 語言的不同。假設某個函數的原型為: void foo(int x, int y);該函數被 C 編譯器編譯后在庫中的名字為_foo ,而C+編譯器則會產生像_foo_int_int之類的名字。C+提供了 C連接交換指定符號 extern “ C”來解決名字匹配問題
38、。124 怎樣定義一個純虛函數?含有純虛函數的類稱為什么? 在虛函數的后面加 =0,含有虛函數的類稱為抽象類。 127類成員函數的重載、覆蓋和隱藏區別 答案:成員函數被重載的特征:(1)相同的圍(在同一個類中) ;(2)函數名字相同;(3)參數不同;(4) virtual關鍵字可有可無。覆蓋是指派生類函數覆蓋基類函數,特征是:(1) 不同的圍(分別位于派生類與基類) ;(2)函數名字相同;(3)參數相同;(4)基類函數必須有 virtual 關鍵字。“隱藏”是指派生類的函數屏蔽了與其同名的基類函數,規則如下:(1) 如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual
39、關鍵 字,基類的函數將被隱藏(注意別與重載混淆) 。(2) 如果派生類的函數與基類的函數同名,并且參數也相同, 但是基類函數沒有 virtual 關 鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)128如何打印出當前源文件的文件名以及源文件的當前行號?答案:cout << _FILE_ ;cout<<_LINE_ ;_FILE_和_LINE_是系統預定義宏, 這種宏并不是在某個文件中定義的, 而是由編譯器定 義的。133 將“引用”作為函數參數有哪些特點?(1)傳遞引用給函數與傳遞指針的效果是一樣的。這時,被調函數的形參就成為原來主調 函數中的實參變量或對象的一個別名
40、來使用, 所以在被調函數中對形參變量的操作就是對其 相應的目標對象(在主調函數中)的操作。(2)使用引用傳遞函數的參數,在存中并沒有產生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數的參數, 當發生函數調用時, 需要給形參分配存儲單元, 形參變量是 實參變量的副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比用一般變量傳遞參數的效率和所占空間都好。3)使用指針作為函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣 要給形參分配存儲單元,且需要重復使用 "* 指針變量名 " 的形式進行運算,這很容易產生錯 誤且程序的閱讀性
41、較差;另一方面,在主調函數的調用點處,必須用變量的地址作為實參。 而引用更容易使用,更清晰。134. 什么時候需要“引用”?流操作符( <<、 >>)和賦值操作符( =)的返回值、拷貝構造函數的參數、賦值操作符的參 數、其它情況都推薦使用引用。135. 面向對象的三個基本特征,并簡單敘述之?1. 封裝:將客觀事物抽象成類,每個類對自身的數據和方法實行 protection(private, protected,public)2. 繼承:廣義的繼承有三種實現形式:實現繼承(指使用基類的屬性和方法而無需額外編 碼的能力)、可視繼承 (子窗體使用父窗體的外觀和實現代碼) 、接
42、口繼承 (僅使用屬性和方 法,實現滯后到子類實現) 。前兩種(類繼承)和后一種(對象組合=>接口繼承以及純虛函數)構成了功能復用的兩種方式。3. 多態:是將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之后,父對象 就可以根據當前賦值給它的子對象的特性以不同的方式運作。 簡單的說, 就是一句話: 允許 將子類類型的指針賦值給父類類型的指針。140. 一個單向鏈表,不知道頭節點 ,一個指針指向其中的一個節點,問如何刪除這個指針指 向的節點?將這個指針指向的 next 節點值 copy 到本節點, 將 next 指向 next->next, 并隨后刪除原 next 指向的節點。
43、157、strcat 能把 strSrc 的容連接到 strDest ,為什么還要 char * 類型的返回值? 答:方便賦值給其他變量158、MFC中 CString是類型安全類么?答:不是,其它數據類型轉換到 CString 可以使用 CString 的成員函數 Format 來轉換159. C+中什么數據分配在棧或堆中?答:棧 : 存放局部變量,函數調用參數 , 函數返回值,函數返回地址。由系統管理 堆: 程序運行時動態申請, new 和 malloc 申請的存就在堆上160、函數模板與類模板有什么區別?答:函數模板的實例化是由編譯程序在處理函數調用時自動完成的,而類模板的實例化 必須由
44、程序員在程序中顯式地指定。161 、 int i=10, j=10, k=3; k*=i+j; k最后的值是?答: 60,此題考察優先級,實際寫成:k*=(i+j); ,賦值運算符優先級最低162、dowhile 和 while do 有什么區別?答 、前一個循環一遍再判斷,后一個判斷以后再循環187 頭文件的作用是什么 ?答:一、通過頭文件來調用庫功能。在很多場合,源代碼不便(或不準)向用戶公布,只要 向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調用庫功能, 而不必關心接口怎么實現的。編譯器會從庫中提取相應的代碼。二、頭文件能加強類型安全檢查。 如果某個接口被實現或被
45、使用時, 其方式與頭文件中的聲 明不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程序員調試、改錯的負擔。206.C和C+有什么不同?從機制上:c是面向過程的(但 c也可以編寫面向對象的程序);C+是面向對象的,提供了 類。但是,C+編寫面向對象的程序比 C容易從適用的方向:C適合要求代碼體積小的,效率高的場合,如嵌入式;C+適合更上層的,復雜的; llinux 核心大部分是 C 寫的,因為它是系統軟件,效率要求極高。從名稱上也可以看出,C+比C多了 +,說明C+是C的超集;那為什么不叫 C+而叫C+呢,是因為C+比C來說擴充的東西太多了,所以就在C后面放上兩個+;于是就成了 C+C語言是
46、結構化編程語言,C+是面向對象編程語言。LUPA開源社區 n*r2C/M8fC+側重于對象而不是過程,側重于類的設計而不是邏輯的設計。298動態連接庫的兩種方式?答:調用一個 DLL 中的函數有兩種方法:1 載入時動態( load-time dynamiC linking 們就像本地函數一樣。這需要時那些函數所在 時所需的信息及DLL函數定位。2運行時動態( run-time dynamiC linking),模塊非常明確調用某個導出函數,使得他DLL的導入庫,導入庫向系統提供了載入DLL),運行時可以通過 LoadLibrary 或 LoadLibraryEx 函數載入 DLL。DLL載入后
47、,模塊可以通過調用GetProcAddress 獲取DLL函數的出口地址, 然后就可以通過返回的函數指針調用38. “引用”與多態的關系?DLL函數了。如此即可避免導入庫文件了。引用是除指針外另一個可以產生多態效果的手段。派生類實例。這意味著, 一個基類的引用可以指向它的四、 棧的表示和實現1. 順序棧順序棧是用順序存儲結構實現的棧, 即利用一組地址連續的存儲單元依次存放自棧 底到棧頂的數據元素,同時由于棧的操作的特殊性, 還必須附設一個位置指針 top (棧頂 指針)來動態地指示棧頂元素在順序棧中的位置。通常以 top=0 或 top=-1 表示空棧。順序 棧的存儲結構可以用 C 語言中的一
48、維數組來表示。 棧的順序存儲結構定義如下:# define STACK_INIT_SIZE 100 / 存儲空間初始分配量# define STACKINCREMENT 10 / 存儲空間分配增量在棧構造前和銷毀后 base 值為 NULL 棧頂指針當前已分配存儲空間typedef struct SElemType *base; / SElemType *top; / int stacksize; SqStack; /或簡單定義如下:# define M 100int sM;int top;初態: top=0; 空棧,棧中無元素,進棧: stop=x;top=top+1;退棧: top=top
49、-1; 取 stop;棧滿: top=M; 棧溢出(上益) ,不能再進棧(錯誤狀態)top=0 時不能退棧,下益(正常狀態,常作控制條件)2. 順序棧基本操作的實現如下 :(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; / InitStack程序描述:/This program is to initialize a stack# include <malloc.h># include <iostream.h># in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新進廠員工安全培訓考試試題4A
- 25年公司三級安全培訓考試試題答案審定
- 2025年美發師創意造型考核試卷:冬季長發造型保暖技巧試題
- 2025-2030中國文檔版本控制軟件行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國多士爐行業市場發展分析及發展前景與投融資研究報告
- 2025-2030中國一次性餐具行業市場深度調研及投資策略與投資前景研究報告
- 2025-2030GPS汽車導航儀市場前景分析及投資策略與風險管理研究報告
- 2025-2030香蠟行業市場發展分析與發展前景及投資戰略研究報告
- 2025-2030電冰箱行業風險投資發展分析及投資融資策略研究報告
- 2025-2030旅游保險行業市場發展分析與發展前景及投資戰略研究報告
- 大學生創業計劃書word文檔(三篇)
- 平移和旋轉的應用
- 小學書法興趣小組活動方案及小學書法興趣小組活動記錄
- 和面機設計說明書畢業設計
- JJG 8-1991水準標尺
- GB/T 4857.17-2017包裝運輸包裝件基本試驗第17部分:編制性能試驗大綱的通用規則
- 直流匯流箱知識培訓
- 綜合工業廢水處理PACT工藝
- GA/T 16.31-2017道路交通管理信息代碼第31部分:交通違法行為類別代碼
- 焊工(中級工)技能鑒定考核評分表
- 惡性黑色素瘤護理查房課件
評論
0/150
提交評論