


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1. 面向對象的程序設計思想是什么?答:把數據結構和對數據結構進行操作的方法封裝形成一個個的對象。2. 什么是類?答:把一些具有共性的對象歸類后形成一個集合,也就是所謂的類。3. 對象都具有的二方面特征是什么?分別是什么含義?答:對象都具有的特征是:靜態特征和動態特征。4. 靜態特征是指能描述對象的一些屬性,動態特征是指對象表現出來的行為在頭文件中進行類的聲明,在對應的實現文件中進行類的定義有什么意義?答:這樣可以提高編譯效率,因為分開的話只需要編譯一次生成對應的.obj文件后,再次應用該類的地方,這個類就不會被再次編譯,從而大大提高了效率。5. 在類的內部定義成員函數的函數體,這種函數會具備
2、那種屬性?答:這種函數會自動為內聯函數,這種函數在函數調用的地方在編譯階段都會進行代碼替換。6. 成員函數通過什么來區分不同對象的成員數據?為什么它能夠區分?答:通過this指針來區分的,因為它指向的是對象的首地址。7. C+編譯器自動為類產生的四個缺省函數是什么?答:默認構造函數,拷貝構造函數,析構函數,賦值函數。8. 拷貝構造函數在哪幾種情況下會被調用?2. 答:1.當類的一個對象去初始化該類的另一個對象時;如果函數的形參是類的對象,調用函數進行形參和實參結合時;如果函數的返回值是類對象,函數調用完成返回時。構造函數與普通函數相比在形式上有什么不同?(構造函數的作用,它的聲明形式來分析)答
3、:構造函數是類的一種特殊成員函數,一般情況下,它是專門用來初始化對象成員變量的。構造函數的名字必須與類名相同,它不具有任何類型,不返回任何值。9. 什么時候必須重寫拷貝構造函數?答:當構造函數涉及到動態存儲分配空間時,要自己寫拷貝構造函數,并且要深拷貝。10. 構造函數的調用順序是什么?答:1.先調用基類構造函數2. 按聲明順序初始化數據成員最后調用自己的構造函數。11. 哪幾種情況必須用到初始化成員列表?答:類的成員是常量成員初始化;類的成員是對象成員初始化,而該對象沒有無參構造函數。類的成員為引用時。12. 什么是常對象?答:常對象是指在任何場合都不能對其成員的值進行修改的對象。13. 靜
4、態函數存在的意義?答:靜態私有成員在類外不能被訪問,可通過類的靜態成員函數來訪問;當類的構造函數是私有的時,不像普通類那樣實例化自己,只能通過靜態成員函數來調用構造函數。14. 在類外有什么辦法可以訪問類的非公有成員?答:友元,繼承,公有成員函數。15. 什么叫抽象類?答:不用來定義對象而只作為一種基本類型用作繼承的類。16. 運算符重載的意義?答:為了對用戶自定義數據類型的數據的操作與內定義的數據類型的數據的操作形式一致。17. 不允許重載的5個運算符是哪些?答:18. .*(成員指針訪問運算符號):域運算符Sizeof長度運算符號?:條件運算符號(成員訪問符)運算符重載的三種方式?答:普通
5、函數,友元函數,類成員函數。19. 流運算符為什么不能通過類的成員函數重載?一般怎么解決?答:因為通過類的成員函數重載必須是運算符的第一個是自己,而對流運算的重載要求第一個參數是流對象。一般通過友兀來解決。20. 賦值運算符和拷貝構造函數的區別與聯系?答:相同點:都是將一個對象copy到另一個中去。不同點:拷貝構造函數涉及到要新建立一個對象。21. 在哪種情況下要調用該類的析構函數?答:對象生命周期結束時。22. 對象間是怎樣實現數據的共享的?答:通過類的靜態成員變量來實現的。靜態成員變量占有自己獨立的空間不為某個對象所私有。23. 友元關系有什么特性?答:單向的,非傳遞的,不能繼承的。24.
6、 對對象成員進行初始化的次序是什么?答:它的次序完全不受它們在初始化表中次序的影響,只有成員對象在類中聲明的次序來決定的。25. 類和對象之間的關系是什么?答:類是對象的抽象,對象是類的實例。26. 對類的成員的訪問屬性有什么?答:public,protected,privateoconstchar*p,char*constp;的區另1J如果const位于星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位于星號的右側,const就是修飾指針本身,即指針本身是常量。是不是一個父類寫了一個virtual函數,如果子類覆蓋它的函數不加virtual,也能實現多態
7、?virtual修飾符會被隱形繼承的。virtual可加可不加,子類覆蓋它的函數不加virtual,也能實現多態。27. 函數重載是什么意思?它與虛函數的概念有什么區別?函數重載是一個同名函數完成不同的功能,編譯系統在編譯階段通過函數參數個數、參數類型不同,函數的返回值來區分該調用哪一個函數,即實現的是靜態的多態性。但是記住:不能僅僅通過函數返回值不同來實現函數重載。而虛函數實現的是在基類中通過使用關鍵字virtual來申明一個函數為虛函數,含義就是該函數的功能可能在將來的派生類中定義或者在基類的基礎之上進行擴展,系統只能在運行階段才能動態決定該調用哪一個函數,所以實現的是動態的多態性。它體現
8、的是一個縱向的概念,也即在基類和派生類間實現。28. 構造函數和析構函數是否可以被重載,為什么?答:構造函數可以被重載,析構函數不可以被重載。因為構造函數可以有多個且可以帶參數,而析構函數只能有一個,且不能帶參數。29. 如何定義和實現一個類的成員函數為回調函數?答:所謂的回調函數,就是預先在系統的對函數進行注冊,讓系統知道這個函數的存在,以后,當某個事件發生時,再調用這個函數對事件進行響應。30. 定義一個類的成員函數時在該函數前加CALLBACK即將其定義為回調函數,函數的實現和普通成員函數沒有區別虛函數是怎么實現的?31. 答:簡單說來使用了虛函數表抽象類不會產生實例,所以不需要有構造函
9、數。錯從一個模板類可以派生新的模板類,也可以派生非模板類。對main函數執行以前,還會執行什么代碼?答案:全局對象的構造函數會在main函數之前執行。當一個類A中沒有生命任何成員變量與成員函數,這時sizeof(A)的值是多少,如果不是零,請解釋一下編譯器為什么沒有讓它為零。(Autodesk)答案:肯定不是零。舉個反例,如果是零的話,聲明一個classA10對象數組,而每一個對象占用的空間是零,這時就沒辦法區分A0,A1了。32. delete與delete區別:delete只會調用一次析構函數,而delete會調用每一個成員的析構函數。199.子類析構時要調用父類的析構函數嗎?40. 會調
10、用,析構函數調用的次序是先派生類的析構后基類的析構,也就是說在基類的的析構調用的時候派生類的信息已經全部銷毀了繼承優缺點。1、類繼承是在編譯時刻靜態定義的,且可直接使用,2、類繼承可以較方便地改變父類的實現。缺點:1、因為繼承在編譯時刻就定義了,所以無法在運行時刻改變從父類繼承的實現2、父類通常至少定義了子類的部分行為,父類的任何改變都可能影響子類的行為3、如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這種依賴關系限制了靈活性并最終限制了復用性。41. 解釋堆和棧的區別。棧區(stack)一由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。堆:一般由程序員分
11、配釋放,若程序員不釋放,程序結束時可能由OS回收。42. 一個類的構造函數和析構函數什么時候被調用,是否需要手工調用?答:構造函數在創建類對象的時候被自動調用,析構函數在類對象生命期結束時,由系統自動調用。43. 何時需要預編譯:總是使用不經常改動的大型代碼體。程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭。44. 多態的作用?主要是兩個:45. 隱藏實現細節,使得代碼能夠模塊化;擴展代碼模塊,實現代碼重用;接口重用:為了類在繼承和派生的時候,保證使用家族中任一類的實例的某一屬性時的正確調用虛擬函數與普通成員函數的區別
12、?內聯函數和構造函數能否為虛擬函數?答案:區別:虛擬函數有virtual關鍵字,有虛擬指針和虛函數表,虛擬指針就是虛擬函數的接口,而普通成員函數沒有。內聯函數和構造函數不能為虛擬函數。46. 構造函數和析構函數的調用順序?析構函數為什么要虛擬?答案:構造函數的調用順序:基類構造函數一對象成員構造函數一派生類構造函數;析構函數的調用順序與構造函數相反。析構函數虛擬是為了防止析構不徹底,造成內存的泄漏。47. .C+中類型為private的成員變量可以由哪些函數訪問?48. 只可以由本類中的成員函數和友員函數訪問請說出類中private,protect,public三種訪問限制類型的區別priva
13、te是私有類型,只有本類中的成員函數訪問;protect是保護型的,本類和繼承類可以訪問;public是公有類型,任何類都可以訪問類中成員變量怎么進行初始化?可以通過構造函數的初始化列表或構造函數的函數體實現。49. 在什么時候需要使用“常引用”?如果既要利用引用提高程序的效率,又要保護傳遞給函數的數據不在函數中被改變,就應使用常引用。50. 引用與指針有什么區別?答、1)引用必須被初始化,指針不必。2)引用初始化以后不能被改變,指針可以改變所指的對象。3)不存在指向空值的引用,但是存在指向空值的指針。描述實時系統的基本特性答、在特定時間內完成特定的任務,實時性與可靠性。54. 全局變量和局部
14、變量在內存中是否有區別?如果有,是什么區別?答、全局變量儲存在靜態數據區,局部變量在堆棧中。55. 堆棧溢出一般是由什么原因導致的?56. 答、沒有回收垃圾資源什么函數不能聲明為虛函數?57. 答構造函數(constructor).IP地址的編碼分為哪倆部分?答IP地址由兩部分組成,網絡號和主機號。58. 不能做switch()的參數類型是:答、switch的參數不能為實型。59. 如何引用一個已經定義過的全局變量?60. 答、可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那么在編譯期間會報錯,如果你用exte
15、rn方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯對于一個頻繁使用的短小函數,在C語言中應用什么實現,在C+中應用什么實現?答、c用宏定義,C+用inline61. NmC+是不是類型安全的?62. 答案:不是。兩個不同類型的指針之間可以強制轉換(用reinterpretcast)當一個類A中沒有生命任何成員變量與成員函數,這時sizeof(A)的值是多少,請解釋一下編譯器為什么沒有讓它為零。答案:為1。舉個反例,如果是零的話,聲明一個classA10對象數組,而每一個對象占用的空間是零,這時就沒辦法區分A0,A1了。63. 簡述數組與指針的區別?數組要么在靜態存儲
16、區被創建(如全局數組),要么在棧上被創建。指針可以隨時指向任意類型的內存塊。(2) 修改內容上的區別chara="hello";a0='X;char*p="world"/注意p指向常量字符串p0='X'/編譯器不能發現該錯誤,運行時錯誤用運算符sizeof可以計算出數組的容量(字節數)。sizeof(p),p為指針得到的是一個指針變量的字節數,而不是p所指的內存容量。C+函數中值的傳遞方式有三種方式:值傳遞、指針傳遞、引用傳遞內存的分配方式分配方式有三種,1、靜態存儲區,是在程序編譯時就已經分配好的,在整個運行期間都存在,如全局變
17、量、常量。2、棧上分配,函數內的局部變量就是從這分配的,但分配的內存容易有限。3、堆上分配,也稱動態分配,如我們用new,malloc分配內存,用delete,free來釋放的內存。64. extern"C"有什么作用?Extern“C”是由C+提供的一個連接交換指定符號,用于告訴C+這段代碼是C函數。這是因為C+編譯后庫中函數名會變得很長,與C生成的不一致,造成C+不能直接調用C函數,加上extren“c”后,C+就能直接調用C函數了。Extern“C”主要使用正規DLL函數的引用和導出和在C+包含C函數或C頭文件時使用。使用時在前面加上extern"c”關鍵字
18、即可。65. 用什么函數開啟新進程、線程。答案:線程:CreateThread/AfxBeginThread等進程:CreateProcess等SendMessage和PostMessage有什么區別答案:SendMessage是阻塞的,等消息被處理后,代碼才能走到SendMessage的下一行。PostMessage是非阻塞的,不管消息是否已被處理,代碼馬上走到PostMessage的下一行。CMemoryState主要功能是什么答案:查看內存使用情況,解決內存泄露問題。66. 26、#include<filename.h>和#include"filename.h&qu
19、ot;有什么區別?67. 答:對于#include<filename.h>,編譯器從標準庫路徑開始搜索filename.h對于#include"filename.h”,編譯器從用戶的工作路徑開始搜索filename.h處理器標識#error的目的是什么?答:編譯時輸出一條錯誤信息,并中止繼續編譯。#if!defined(AFX_-_HADE_H)#define(AFX_-_HADE_H)#endif作用?防止該頭文件被重復引用。68. 在定義一個宏的時候要注意什么?69. 定義部分的每個形參和整個表達式都必須用括號括起來,以避免不可預料的錯誤發生數組在做函數實參的時候會轉
20、變為什么類型?數組在做實參時會變成指針類型。70. 系統會自動打開和關閉的3個標準的文件是?76. 標準輸入-鍵盤-stdin標準輸出-顯示器-stdout標準出錯輸出-顯示器-stderr在Win32下char,int,float,double各占多少位?77. Char占用8位Int占用32位Float占用32位Double占用64位strcpy()和memcpy()的區別?strcpy()和memcpy()都可以用來拷貝字符串,strcpy()拷貝以0'結束,但memcpy()必須指定拷貝的長度。78. 說明define和const在語法和含義上有什么不同?#define是C語法
21、中定義符號變量的方法,符號常量只是用來表達一個值,在編譯階段符號就被值替換了,它沒有類型;Const是C+語法中定義常變量的方法,常變量具有變量特性,它具有類型,內存中存在以它命名的存儲單元,可以用sizeof測出長度。79. 說出字符常量和字符串常量的區別,并使用運算符sizeof計算有什么不用?字符常量是指單個字符,字符串常量以0'結束,使用運算符sizeof計算多占一字節的存儲空間。80. 簡述全局變量的優缺點?全局變量也稱為外部變量,它是在函數外部定義的變量,它屬于一個源程序文件,它保存上一次被修改后的值,便于數據共享,但不方便管理,易引起意想不到的錯誤。81. 總結stati
22、c的應用和作用?函數體內static變量的作用范圍為該函數體,不同于auto變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值;在模塊內的static全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問;在模塊內的static函數只可被這一模塊內的其它函數調用,這個函數的使用范圍被限制在聲明它的模塊內;(1) 在類中的static成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝;(2) 在類中的static成員函數屬于整個類所擁有,這個函數不接收this指針,因而只能訪問類的static成員變量。82. 總結const的應用和作用?欲阻止一個變量被改變,可以使用co
23、nst關鍵字。在定義該const變量時,通常需要對它進行初始化,因為以后就沒有機會再去改變它了;對指針來說,可以指定指針本身為const,也可以指定指針所指的數據為const,或二者同時指定為const;在一個函數聲明中,const可以修飾形參,表明它是一個輸入參數,在函數內部不能改變其值;對于類的成員函數,若指定其為const類型,則表明其是一個常函數,不能修改類的成員變量;對于類的成員函數,有時候必須指定其返回值為const類型,以使得其返回值不為“左值”。83. 什么是指針?談談你對指針的理解?指針是一個變量,該變量專門存放內存地址;指針變量的類型取決于其指向的數據類型,在所指數據類型前
24、加*指針變量的特點是它可以訪問所指向的內存。84. 什么是常指針,什么是指向常變量的指針?85. 常指針的含義是該指針所指向的地址不能變,但該地址所指向的內容可以變化,使用常指針可以保證我們的指針不能指向其它的變量,指向常變量的指針是指該指針的變量本身的地址可以變化,可以指向其它的變量,但是它所指的內容不可以被修改。指向長變量的指針定義,函數指針和指針函數的區別?函數指針是指指向一個函數入口的指針;指針函數是指函數的返回值是一個指針類型。87. 簡述Debug版本和Release版本的區別?88. Debug版本是調試版本,Release版本是發布給用戶的最終非調試的版本,指針的幾種典型應用情
25、況?int*pn;指針數組,每個元素均為指向整型數據的指針。int(*)pn;p為指向一維數組的指針,這個一維數組有n個整型數據。int*p();函數帶回指針,指針指向返回的值。int(*)p();p為指向函數的指針。89. static函數與普通函數有什么區別?90. static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝struct(結構)和union(聯合)的區別?結構和聯合都是由多個不同的數據類型成員組成,但在任何同一時刻,聯合中只存放了一個被選中的成員(所有成員共用一塊地址空間),而結構的所有成員都存在(不同成員的存放地址不同)。對于聯合的不同成員賦值,將會對其它成員重
26、寫,原來成員的值就不存在了,而對于結構的不同成員賦值是互不影響的。91. class和struct的區別?struct的成員默認是公有的,而類的成員默認是私有的。92. 簡述枚舉類型?93. 枚舉方便一次定義一組常量,使用起來很方便;assertQ作用?ASSERT()是一個調試程序時經常使用的宏,在程序運行時它計算括號內的表達式,如果表達式為FALSE(0),程序將報告錯誤,并終止執行。如果表達式不為0,則繼續執行后面的語句。這個宏通常原來判斷程序中是否出現了明顯非法的數據,如果出現了終止程序以免導致嚴重后果,同時也便于查找錯誤。94. 局部變量和全局變量是否可以同名?能,局部會屏蔽全局。要
27、用全局變量,需要使用":"(域運算符)。程序的局部變量存在于(堆棧)中,全局變量存在于(靜態區)中,動態申請數據存在于(堆)中。95. 在什么時候使用常引用?如果既要利用引用提高程序的效率,又要保護傳遞給函數的數據不在函數中被改變,就應使用常引用。96. 類的聲明和實現的分開的好處?1. 起保護作用;提高編譯的效率。97. windows消息系統由哪幾部分構成?由一下3部分組成:1. 消息隊列:操作系統負責為進程維護一個消息隊列,程序運行時不斷從該消息隊列中獲取消息、處理消息;消息循環:應用程序通過消息循環不斷獲取消息、處理消息。2. 消息處理:消息循環負責將消息派發到相關
28、的窗口上使用關聯的窗口過程函數進行處理。98. 什么是消息映射?消息映射就是讓程序員指定MFC類(有消息處理能力的類)處理某個消息。然后由程序員完成對該處理函數的編寫,以實現消息處理功能。99. 什么是UDP和TCP的區別是什么?TCP的全稱為傳輸控制協議。這種協議可以提供面向連接的、可靠的、點到點的通信。UDP全稱為用戶報文協議,它可以提供非連接的不可靠的點到多點的通信。用TCP還是UDP,那要看你的程序注重哪一個方面?可靠還是快速?100. winsock建立連接的主要實現步驟?答:服務器端:socket()建立套接字,綁定(bind)并監聽(listen),用accept()等待客戶端連
29、接,accept0發現有客戶端連接,建立一個新的套接字,自身重新開始等待連接。該新產生的套接字使用send()和recv()寫讀數據,直至數據交換完畢,closesocket()關閉套接字。客戶端:socket()建立套接字,連接(connect)服務器,連接上后使用send()和recv(),在套接字上寫讀數據,直至數據交換完畢,closesocket()關閉套接字。101. 進程間主要的通訊方式?102. 信號量,管道,消息,共享內存構成Win32API函數的三個動態鏈接庫是什么?答:內核庫,用戶界面管理庫,圖形設備界面庫。103. 創建一個窗口的步驟是?答:填充一個窗口類結構->注
30、冊這個窗口類->然后再創建窗口->顯示窗口->更新窗口。104. 模態對話框和非模態對話框有什么區別?答:1.調用規則不同:前者是用DoModal()調用,后者通過屬性和ShowWindow()來顯示。2. 模態對話框在沒有關閉前用戶不能進行其他操作,而非模態對話框可以。3. 非模態對話框創建時必須編寫自己的共有構造函數,還要調用Create()函數。從EDIT框中取出數據給關聯的變量,已經把關聯的變量的數據顯示在EDIT框上的函數是什么?答:UpdateData(TRUE),Updatedata(FALSE).105. 簡單介紹GDI?答;GDI是GraphicsDevic
31、eInterface的縮寫,譯為:圖形設備接口;是一個在Windows應用程序中執行與設備無關的函數庫,這些函數在不同的輸出設備上產生圖形以及文字輸出。106. windows消息分為幾類?并對各類做簡單描述。1. 窗口消息:與窗口相關的消息,除WM_COMMAND之外的所有以WM_開頭的消息;命令消息;用于處理用戶請求,以WM_COMMAND表示的消息;控件通知消息:統一由WM_NOTIFT表示,用戶自定義消息。107. 如何自定義消息?108. 使用WM_USER和WM_APP兩個宏來自定義消息,簡述VisualC+、Win32API和MFC之間的關系?VisualC+是一個以C+程序設計
32、語言為基礎的、集成的、可視化的編程環境;Win32API是32位Windows操作系以C/C+形式提供的一組應用程序接口;MFC是對Win32API的封裝,簡化了開發過程。109. 怎樣消除多重繼承中的二義性?成員限定符虛基類112什么叫靜態關聯,什么叫動態關聯在多態中,如果程序在編譯階段就能確定實際執行動作,則稱靜態關聯,如果等到程序運行才能確定叫動態關聯。114. 113多態的兩個必要條件一個基類的指針或引用指向一個派生類對象,虛函數什么叫智能指針?當一個類中,存在一個指向另一個類對象的指針時,對指針運算符進行重載,那么當前類對象可以通過指針像調用自身成員一樣調用另一個類的成員。115.
33、什么時候需要用虛析構函數?當基類指針指向用new運算符生成的派生類對象時,delete基類指針時,派生類部分沒有釋放掉而造成釋放不徹底現象,需要虛析構函數。116. MFC中,大部分類是從哪個類繼承而來?117. CObject什么是平衡二叉樹?118. 答:左右子樹都是平衡二叉樹,而且左右子樹的深度差值的約對值不大于1語句for(;1;)有什么問題?它是什么意思?答:無限循環,和while(1)相同。派生新類的過程要經歷三個步驟1吸收基類成員改造基類成員添加新成員TCP/IP建立連接的過程在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。第一次握手:建立連接時,客
34、戶端發送連接請求到服務器,并進入SYN_SEND狀態,等待服務器確認;第二次握手:服務器收到客戶端連接請求,向客戶端發送允許連接應答,此時服務器進入SYN_RECV狀態;第三次握手:客戶端收到服務器的允許連接應答,向服務器發送確認,客戶端和服務器進入通信狀態,完成三次握手.memset,memcpy的區另Umemset用來對一段內存空間全部設置為某個字符,一般用在對定義的字符串進行初始化為'0'。121. memcpy用來做內存拷貝,你可以拿它拷貝任何數據類型的對象,可以指定拷貝的數據長度;在C+程序中調用被C編譯器編譯后的函數,為什么要加extern"C”?答:C+
35、語言支持函數重載,C語言不支持函數重載。函數被C+編譯后在庫中的名字與C語言的不同。假設某個函數的原型為:voidfoo(intx,inty);該函數被C編譯器編譯后在庫中的名字為_foo,而C+編譯器則會產生像_foo_int_int之類的名字。C+提供了C連接交換指定符號extern"C”來解決名字匹配問題。124怎樣定義一個純虛函數?含有純虛函數的類稱為什么?在虛函數的后面加=0,含有虛函數的類稱為抽象類。類成員函數的重載、覆蓋和隱藏區別答案:成員函數被重載的特征:(1) 相同的范圍(在同一個類中);(2) 函數名字相同;(3) 參數不同;(4) virtual關鍵字可有可無。
36、覆蓋是指派生類函數覆蓋基類函數,特征是:(1) 不同的范圍(分別位于派生類與基類);(2) 函數名字相同;(3) 參數相同;(4) 基類函數必須有virtual關鍵字。“隱藏”是指派生類的函數屏蔽了與其同名的基類函數,規則如下:如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。127. 如果派生類的函數與基類的函數同名,并且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)如何打印出當前源文件的文件名以及源文件的當前行號?答案:cout<<_FILE_;cout<
37、;<_LINE_;_FILE_和_LINE_是系統預定義宏,這種宏并不是在某個文件中定義的,而是由編譯器定義的。133將“引用”作為函數參數有哪些特點?傳遞引用給函數與傳遞指針的效果是一樣的。這時,被調函數的形參就成為原來主調函數中的實參變量或對象的一個別名來使用,所以在被調函數中對形參變量的操作就是對其相應的目標對象(在主調函數中)的操作。使用引用傳遞函數的參數,在內存中并沒有產生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比
38、用一般變量傳遞參數的效率和所占空間都好。使用指針作為函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣要給形參分配存儲單元,且需要重復使用”*指針變量名”的形式進行運算,這很容易產生錯誤且程序的閱讀性較差;另一方面,在主調函數的調用點處,必須用變量的地址作為實參。而引用更容易使用,更清晰。134. 什么時候需要“引用”?流操作符(、)和賦值操作符(=)的返回值、拷貝構造函數的參數、賦值操作符的參數、其它情況都推薦使用引用。135. 面向對象的三個基本特征,并簡單敘述之?封裝:將客觀事物抽象成類,每個類對自身的數據和方法實行protection(private,protected,p
39、ublic)繼承:廣義的繼承有三種實現形式:實現繼承(指使用基類的屬性和方法而無需額外編碼的能力)、可視繼承(子窗體使用父窗體的外觀和實現代碼)、接口繼承(僅使用屬性和方法,實現滯后到子類實現)。前兩種(類繼承)和后一種(對象組合=接口繼承以及純虛函數)構成了功能復用的兩種方式。多態:是將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之后,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。140.一個單向鏈表,不知道頭節點,一個指針指向其中的一個節點,問如何刪除這個指針指向的節點?將這個指針指向的next節點值c
40、opy到本節點,將next指向next-next,并隨后刪除原next指向的節點。157、strcat能把strSrc的內容連接到strDest,為什么還要char*類型的返回值?答:方便賦值給其他變量158、MFC中CString是類型安全類么?159. 答:不是,其它數據類型轉換到CString可以使用CString的成員函數Format來轉換C+中什么數據分配在棧或堆中?答:棧:存放局部變量,函數調用參數,函數返回值,函數返回地址。由系統管理堆:程序運行時動態申請,new和malloc申請的內存就在堆上160、函數模板與類模板有什么區別?答:函數模板的實例化是由編譯程序在處理函數調用時自
41、動完成的,而類模板的實例化必須由程序員在程序中顯式地指定。161、inti=10,j=10,k=3;k*=i+j;k最后的值是?答:60,此題考察優先級,實際寫成:k*=(i+j);,賦值運算符優先級最低162、dowhile和whiledo有什么區別?答、前一個循環一遍再判斷,后一個判斷以后再循環187頭文件的作用是什么?答:一、通過頭文件來調用庫功能。在很多場合,源代碼不便(或不準)向用戶公布,只要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調用庫功能,而不必關心接口怎么實現的。編譯器會從庫中提取相應的代碼。二、頭文件能加強類型安全檢查。如果某個接口被實現或被使用時
42、,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程序員調試、改錯的負擔。206.C和C+有什么不同?從機制上:c是面向過程的(但c也可以編寫面向對象的程序);C+是面向對象的,提供了類。但是,C+編寫面向對象的程序比C容易從適用的方向:C適合要求代碼體積小的,效率高的場合,如嵌入式;C+適合更上層的,復雜的;llinux核心大部分是c寫的,因為它是系統軟件,效率要求極高。從名稱上也可以看出,C+比c多了+,說明C+是c的超集;那為什么不叫c+而叫C+呢,是因為C+比C來說擴充的東西太多了,所以就在C后面放上兩個+;于是就成了C+C語言是結構化編程語言,C+是面向對象
43、編程語言。LUPA開源社區n*r2C/M8fC+側重于對象而不是過程,側重于類的設計而不是邏輯的設計。298.動態連接庫的兩種方式?答:調用一個DLL中的函數有兩種方法:載入時動態鏈接(load-timedynamiclinking),模塊非常明確調用某個導出函數,使得他們就像本地函數一樣。這需要鏈接時鏈接那些函數所在DLL的導入庫,導入庫向系統提供了載入DLL時所需的信息及DLL函數定位。運行時動態鏈接(run-timedynamiclinking),運行時可以通過LoadLibrary或LoadLibraryEx函數載入DLL。DLL載入后,模塊可以通過調用GetProcAddress獲取
44、DLL函數的出口地址,然后就可以通過返回的函數指針調用DLL函數了。如此即可避免導入庫文件了。38.“引用”與多態的關系?引用是除指針外另一個可以產生多態效果的手段。派生類實例。這意味著,一個基類的引用可以指向它的四、棧的表示和實現順序棧順序棧是用順序存儲結構實現的棧,即利用一組地址連續的存儲單元依次存放自棧底到棧頂的數據元素,同時由于棧的操作的特殊性,還必須附設一個位置指針top(棧頂指針)來動態地指示棧頂元素在順序棧中的位置。通常以top=0或top=-1表示空棧。順序棧的存儲結構可以用C語言中的一維數組來表示。棧的順序存儲結構定義如下:#defineSTACK_INIT_SIZE100存
45、儲空間初始分配量defineSTACKINCREMENT10/存儲空間分配增量typedefstructSElemType*base;/在棧構造前和銷毀后base值為NULLSElemType*top;棧頂指針intstacksize;SqStack;/當前已分配存儲空間或簡單定義如下:1. #defineM100intsM;inttop;初態:top=0;空棧,棧中無元素,進棧:stop=x;top=top+1;退棧:top=top-1;取stop;棧滿:top=M;棧溢出(上益),不能再進棧(錯誤狀態)top=0時不能退棧,下益(正常狀態,常作控制條件)順序棧基本操作的實現如下:(1)構造空順序棧算法:初始化棧StatusInitStack(SqStack&S)/構造一個空棧SS.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(OVERFLOW);/為棧分配存儲空間失敗S.top=S.base;/令棧頂指針
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 情緒管理在銷售團隊中的應用
- 改進定點醫療機構醫生隊伍建設與培訓模式
- 教育與培訓在建設智慧城市中的重要性
- 教育信息化與在線教育市場研究
- 中國珍仙米行業市場發展前景及發展趨勢與投資戰略研究報告(2024-2030)
- 沖浪俱樂部建筑設計企業制定與實施新質生產力項目商業計劃書
- 仿皮沙發遙控收納創新創業項目商業計劃書
- 2025年中國高纖維食物行業市場調查研究及發展戰略規劃報告
- 提高團隊凝聚力的活動建議
- 甘肅加鑫礦業有限公司合作市下看木倉金礦礦產資源開發與恢復治理方案專家組審查意見
- 醫院物業服務招標綜合評分表
- 軟件工程導論(第六版)張海藩-牟永敏課后習題答案
- 物體打擊應急演練總結
- 環境保護局水質自動在線監測儀、站房及3年運營維護服務招投標書范本
- 天然氣管道工程管道焊接施工方案
- GB/T 95-2002平墊圈C級
- GB/T 16823.3-1997螺紋緊固件擰緊試驗方法
- 幼兒園消防安全組織機構圖
- 英語社團活動課件
- 第三方檢測市場部管理制度提成方案
- 學前兒童發展心理學-情感
評論
0/150
提交評論