2024年3月29日發(作者:感恩同學的作文)

1. 面向對象的程序設計思想是什么?
答:把數據結構和對數據結構進行操作的方法封裝形成一個個的對象。
2. 什么是類?
答:把一些具有共性的對象歸類后形成一個集合,也就是所謂的類。
3. 對象都具有的二方面特征是什么?分別是什么含義?
答:對象都具有的特征是:靜態特征和動態特征。
靜態特征是指能描述對象的一些屬性,動態特征是指對象表現出來的行為
4. 在頭文件中進行類的聲明,在對應的實現文件中進行類的定義有什么意義?
答:這樣可以提高編譯效率,因為分開的話只需要編譯一次生成對應的.obj文件后,再次應
用該類的地方,這個類就不會被再次編譯,從而大大提高了效率。
5. 在類的內部定義成員函數的函數體,這種函數會具備那種屬性?
答:這種函數會自動為內聯函數,這種函數在函數調用的地方在編譯階段都會進行代碼替換。
6. 成員函數通過什么來區分不同對象的成員數據?為什么它能夠區分?
答:通過this指針來區分的, 因為它指向的是對象的首地址。
7. C++編譯器自動為類產生的四個缺省函數是什么?
答:默認構造函數,拷貝構造函數,析構函數,賦值函數。
8. 拷貝構造函數在哪幾種情況下會被調用?
答:1.當類的一個對象去初始化該類的另一個對象時;
2.如果函數的形參是類的對象,調用函數進行形參和實參結合時;
3.如果函數的返回值是類對象,函數調用完成返回時。
9. 構造函數與普通函數相比在形式上有什么不同?(構造函數的作用,它的聲明形式來分
析)
答:構造函數是類的一種特殊成員函數,一般情況下,它是專門用來初始化對象成員變量的。
構造函數的名字必須與類名相同,它不具有任何類型,不返回任何值。
10. 什么時候必須重寫拷貝構造函數?
答:當構造函數涉及到動態存儲分配空間時,要自己寫拷貝構造函數,并且要深拷貝。
11. 構造函數的調用順序是什么?
答:1.先調用基類構造函數
2.按聲明順序初始化數據成員
3.最后調用自己的構造函數。
12. 哪幾種情況必須用到初始化成員列表?
答:類的成員是常量成員初始化;
類的成員是對象成員初始化,而該對象沒有無參構造函數。
類的成員為引用時。
13. 什么是常對象?
答:常對象是指在任何場合都不能對其成員的值進行修改的對象。
14. 靜態函數存在的意義?
答:靜態私有成員在類外不能被訪問,可通過類的靜態成員函數來訪問;
當類的構造函數是私有的時,不像普通類那樣實例化自己,只能通過靜態成員函數來調用構
造函數。
15. 在類外有什么辦法可以訪問類的非公有成員?
答:友元,繼承,公有成員函數。
16. 什么叫抽象類?
答:不用來定義對象而只作為一種基本類型用作繼承的類。
17. 運算符重載的意義?
答:為了對用戶自定義數據類型的數據的操作與內定義的數據類型的數據的操作形式一致。
18. 不允許重載的5個運算符是哪些?
答:
1. .*(成員指針訪問運算符號)
2. ::域運算符
3. Sizeof 長度運算符號
4. ?:條件運算符號
5. .(成員訪問符)
19. 運算符重載的三種方式?
答:普通函數,友元函數,類成員函數。
20. 流運算符為什么不能通過類的成員函數重載?一般怎么解決?
答:因為通過類的成員函數重載必須是運算符的第一個是自己,而對流運算的重載要求第一
個參數是流對象。一般通過友元來解決。
21. 賦值運算符和拷貝構造函數的區別與聯系?
答:相同點:都是將一個對象copy到另一個中去。
不同點:拷貝構造函數涉及到要新建立一個對象。
22. 在哪種情況下要調用該類的析構函數?
答:對象生命周期結束時。
23. 對象間是怎樣實現數據的共享的?
答:通過類的靜態成員變量來實現的。靜態成員變量占有自己獨立的空間不為某個對象所私
有。
24. 友元關系有什么特性?
答:單向的,非傳遞的,不能繼承的。
25. 對對象成員進行初始化的次序是什么?
答:它的次序完全不受它們在初始化表中次序的影響,只有成員對象在類中聲明的次序來決
定的。
26. 類和對象之間的關系是什么?
答:類是對象的抽象,對象是類的實例。
27. 對類的成員的訪問屬性有什么?
答:public,protected,private。
28. const char *p,char * const p;的區別
如果const位于星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;
如果const位于星號的右側,const就是修飾指針本身,即指針本身是常量。
29. 是不是一個父類寫了一個virtual 函數,如果子類覆蓋它的函數不加virtual ,也能實現多
態?
virtual修飾符會被隱形繼承的。
virtual可加可不加,子類覆蓋它的函數不加virtual ,也能實現多態。
30. 函數重載是什么意思?它與虛函數的概念有什么區別?
函數重載是一個同名函數完成不同的功能,編譯系統在編譯階段通過函數參數個數、參數類
型不同,函數的返回值來區分該調用哪一個函數,即實現的是靜態的多態性。但是記住:不
能僅僅通過函數返回值不同來實現函數重載。而虛函數實現的是在基類中通過使用關鍵字
virtual來申明一個函數為虛函數,含義就是該函數的功能可能在將來的派生類中定義或者在
基類的基礎之上進行擴展,系統只能在運行階段才能動態決定該調用哪一個函數,所以實現
的是動態的多態性。它體現的是一個縱向的概念,也即在基類和派生類間實現。
31. 構造函數和析構函數是否可以被重載,為什么?
答:構造函數可以被重載,析構函數不可以被重載。因為構造函數可以有多個且可以帶參數,
而析構函數只能有一個,且不能帶參數。
32. 如何定義和實現一個類的成員函數為回調函數?
答:
所謂的回調函數,就是預先在系統的對函數進行注冊,讓系統知道這個函數的存在,以后,
當某個事件發生時,再調用這個函數對事件進行響應。
定義一個類的成員函數時在該函數前加CALLBACK即將其定義為回調函數,函數的實現和
普通成員函數沒有區別
33. 虛函數是怎么實現的?
答:簡單說來使用了虛函數表.
34. 抽象類不會產生實例,所以不需要有構造函數。 錯
35. 從一個模板類可以派生新的模板類,也可以派生非模板類。 對
36. main 函數執行以前,還會執行什么代碼?
答案:全局對象的構造函數會在main 函數之前執行。
37. 當一個類A 中沒有生命任何成員變量與成員函數,這時sizeof(A)的值是多少,如果不是
零,請解釋一下編譯器為什么沒有讓它為零。(Autodesk)
答案:肯定不是零。舉個反例,如果是零的話,聲明一個class A[10]對象數組,而每一個對
象占用的空間是零,這時就沒辦法區分A[0],A[1]…了。
38. delete與 delete []區別:
delete只會調用一次析構函數,而delete[]會調用每一個成員的析構函數。
199. 子類析構時要調用父類的析構函數嗎?
會調用,
析構函數調用的次序是先派生類的析構后基類的析構,也就是說在基類的的析構調用的時候,
派生類的信息已經全部銷毀了
40. .繼承優缺點。
1、類繼承是在編譯時刻靜態定義的,且可直接使用,
2、類繼承可以較方便地改變父類的實現。
缺點:
1、因為繼承在編譯時刻就定義了,所以無法在運行時刻改變從父類繼承的實現
2、父類通常至少定義了子類的部分行為,父類的任何改變都可能影響子類的行為
3、如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。
這種依賴關系限制了靈活性并最終限制了復用性。
41. 解釋堆和棧的區別。
棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。
堆:一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。
42. 一個類的構造函數和析構函數什么時候被調用,是否需要手工調用?
答:構造函數在創建類對象的時候被自動調用,析構函數在類對象生命期結束時,由系統自
動調用。
43. 何時需要預編譯:
總是使用不經常改動的大型代碼體。
程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況
下,可以將所有包含文件預編譯為一個預編譯頭。
44. 多態的作用?
主要是兩個:
1. 隱藏實現細節,使得代碼能夠模塊化;擴展代碼模塊,實現代碼重用;
2. 接口重用:為了類在繼承和派生的時候,保證使用家族中任一類的實例的某一屬性時的
正確調用
45. 虛擬函數與普通成員函數的區別?內聯函數和構造函數能否為虛擬函數?
答案:區別:虛擬函數有virtual關鍵字,有虛擬指針和虛函數表,虛擬指針就是虛擬函數
的接口,而普通成員函數沒有。內聯函數和構造函數不能為虛擬函數。
46. 構造函數和析構函數的調用順序? 析構函數為什么要虛擬?
答案:構造函數的調用順序:基類構造函數—對象成員構造函數—派生類構造函數;析構函
數的調用順序與構造函數相反。析構函數虛擬是為了防止析構不徹底,造成內存的泄漏。
47. .C++中類型為private的成員變量可以由哪些函數訪問?
只可以由本類中的成員函數和友員函數訪問
48. 請說出類中private,protect,public三種訪問限制類型的區別
private是私有類型,只有本類中的成員函數訪問;protect是保護型的,本類和繼承類可以訪
問;public是公有類型,任何類都可以訪問.
49. 類中成員變量怎么進行初始化?
可以通過構造函數的初始化列表或構造函數的函數體實現。
50. 在什么時候需要使用“常引用”?
如果既要利用引用提高程序的效率,又要保護傳遞給函數的數據不在函數中被改變,就應使
用常引用。
51. 引用與指針有什么區別?
答 、1) 引用必須被初始化,指針不必。
2) 引用初始化以后不能被改變,指針可以改變所指的對象。
3) 不存在指向空值的引用,但是存在指向空值的指針。
52. 描述實時系統的基本特性
答 、在特定時間內完成特定的任務,實時性與可靠性。
54. 全局變量和局部變量在內存中是否有區別?如果有,是什么區別?
答 、全局變量儲存在靜態數據區,局部變量在堆棧中。
55. 堆棧溢出一般是由什么原因導致的?
答 、沒有回收垃圾資源
56. 什么函數不能聲明為虛函數?
答 構造函數(constructor)
57. .IP地址的編碼分為哪倆部分?
答 IP地址由兩部分組成,網絡號和主機號。
58. .不能做switch()的參數類型是:
答 、switch的參數不能為實型。
59. 如何引用一個已經定義過的全局變量?
答 、可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某
個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那么在編譯期間會報錯,如果你用
extern方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯
60. 對于一個頻繁使用的短小函數,在C語言中應用什么實現,在C++中應用什么實現?
答 、c用宏定義,c++用inline
Nm
61. C++是不是類型安全的?
答案:不是。兩個不同類型的指針之間可以強制轉換(用reinterpret cast)
62. 當一個類A 中沒有生命任何成員變量與成員函數,這時sizeof(A)的值是多少,請解釋一
下編譯器為什么沒有讓它為零。
答案:為1。舉個反例,如果是零的話,聲明一個class A[10]對象數組,而每一個對象占用
的空間是零,這時就沒辦法區分A[0],A[1]…了。
63. 簡述數組與指針的區別?
數組要么在靜態存儲區被創建(如全局數組),要么在棧上被創建。指針可以隨時指向任意
類型的內存塊。
(1)修改內容上的區別
char a[] = “hello”;
a[0] = ‘X’;
char *p = “world”; // 注意p 指向常量字符串
p[0] = ‘X’; // 編譯器不能發現該錯誤,運行時錯誤
(2) 用運算符sizeof 可以計算出數組的容量(字節數)。sizeof(p),p 為指針得到的是一個指
針變量的字節數,而不是p 所指的內存容量。
64. C++函數中值的傳遞方式
有三種方式:值傳遞、指針傳遞、引用傳遞
65. 內存的分配方式
分配方式有三種,
1、 靜態存儲區,是在程序編譯時就已經分配好的,在整個運行期間都存在,如全局變量、
常量。
2、 棧上分配,函數內的局部變量就是從這分配的,但分配的內存容易有限。
3、 堆上分配,也稱動態分配,如我們用new,malloc分配內存,用delete,free來釋放的內存。
66. extern“C”有什么作用?
Extern “C”是由C++提供的一個連接交換指定符號,用于告訴C++這段代碼是C函數。
這是因為C++編譯后庫中函數名會變得很長,與C生成的不一致,造成C++不能直接調
用C函數,加上extren “c”后,C++就能直接調用C函數了。
Extern “C”主要使用正規DLL函數的引用和導出 和 在C++包含C函數或C頭文件時使
用。使用時在前面加上extern “c” 關鍵字即可。
67. 用什么函數開啟新進程、線程。
答案:
線程:CreateThread/AfxBeginThread等
進程:CreateProcess等
68. SendMessage和PostMessage有什么區別
答案:SendMessage是阻塞的,等消息被處理后,代碼才能走到SendMessage的下一行。
PostMessage是非阻塞的,不管消息是否已被處理,代碼馬上走到PostMessage的下一行。
69. CMemoryState主要功能是什么
答案:查看內存使用情況,解決內存泄露問題。
70. 26、#include
答:對于#include
對于#include “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.h
71. 處理器標識#error的目的是什么?
答:編譯時輸出一條錯誤信息,并中止繼續編譯。
72. #if!defined(AFX_…_HADE_H)
#define(AFX_…_HADE_H)
……
#endif作用?
防止該頭文件被重復引用。
73. 在定義一個宏的時候要注意什么?
定義部分的每個形參和整個表達式都必須用括號括起來,以避免不可預料的錯誤發生
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()和memcpy()都可以用來拷貝字符串,strcpy()拷貝以’0’結束,但memcpy()必
須指定拷貝的長度。
78. 說明define和const在語法和含義上有什么不同?
(1) #define是C語法中定義符號變量的方法,符號常量只是用來表達一個值,在編譯階段
符號就被值替換了,它沒有類型;
(2) Const是C++語法中定義常變量的方法,常變量具有變量特性,它具有類型,內存中存
在以它命名的存儲單元,可以用sizeof測出長度。
79. 說出字符常量和字符串常量的區別,并使用運算符sizeof計算有什么不用?
字符常量是指單個字符,字符串常量以‘0’結束,使用運算符sizeof計算多占一字節的存
儲空間。
80. 簡述全局變量的優缺點?
全局變量也稱為外部變量,它是在函數外部定義的變量,它屬于一個源程序文件,它保存上
一次被修改后的值,便于數據共享,但不方便管理,易引起意想不到的錯誤。
81. 總結static的應用和作用?
(1)函數體內static變量的作用范圍為該函數體,不同于auto變量,該變量的內存只被分
配一次,因此其值在下次調用時仍維持上次的值;
(2)在模塊內的static全局變量可以被模塊內所用函數訪問,但不能被模塊外其它函數訪
問;
(3)在模塊內的static函數只可被這一模塊內的其它函數調用,這個函數的使用范圍被限
制在聲明它的模塊內;
(4)在類中的static成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝;
(5)在類中的static成員函數屬于整個類所擁有,這個函數不接收this指針,因而只能訪
問類的static成員變量。
82. .總結const的應用和作用?
(1)欲阻止一個變量被改變,可以使用const關鍵字。在定義該const變量時,通常需要對
它進行初始化,因為以后就沒有機會再去改變它了;
(2)對指針來說,可以指定指針本身為const,也可以指定指針所指的數據為const,或二
者同時指定為const;
(3)在一個函數聲明中,const可以修飾形參,表明它是一個輸入參數,在函數內部不能改
變其值;
(4)對于類的成員函數,若指定其為const類型,則表明其是一個常函數,不能修改類的
成員變量;
(5)對于類的成員函數,有時候必須指定其返回值為const類型,以使得其返回值不為“左
值”。
83. 什么是指針?談談你對指針的理解?
指針是一個變量,該變量專門存放內存地址;
指針變量的類型取決于其指向的數據類型,在所指數據類型前加*
指針變量的特點是它可以訪問所指向的內存。
84. 什么是常指針,什么是指向常變量的指針?
常指針的含義是該指針所指向的地址不能變,但該地址所指向的內容可以變化,使用常指針
可以保證我們的指針不能指向其它的變量,
指向常變量的指針是指該指針的變量本身的地址可以變化,可以指向其它的變量,但是它所
指的內容不可以被修改。指向長變量的指針定義,
85. 函數指針和指針函數的區別?
函數指針是指指向一個函數入口的指針;
指針函數是指函數的返回值是一個指針類型。
87. 簡述Debug版本和Relea版本的區別?
Debug版本是調試版本,Relea版本是發布給用戶的最終非調試的版本,
88. 指針的幾種典型應用情況?
int *p[n];-----指針數組,每個元素均為指向整型數據的指針。
int (*)p[n];------p為指向一維數組的指針,這個一維數組有n個整型數據。
int *p();----------函數帶回指針,指針指向返回的值。
int (*)p();------p為指向函數的指針。
89. static函數與普通函數有什么區別?
static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝
90. struct(結構) 和 union(聯合)的區別?
1. 結構和聯合都是由多個不同的數據類型成員組成, 但在任何同一時刻, 聯合中只存放了
一個被選中的成員(所有成員共用一塊地址空間), 而結構的所有成員都存在(不同成員的
存放地址不同)。
2. 對于聯合的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對于結
構的不同成員賦值是互不影響的。
91. class 和 struct 的區別?
struct 的成員默認是公有的,而類的成員默認是私有的。
92. 簡述枚舉類型?
枚舉方便一次定義一組常量,使用起來很方便;
93. asrt()的作用?
本文發布于:2024-03-29 06:18:52,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/1711664333176140.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:c開發工程師常用面試題.doc
本文 PDF 下載地址:c開發工程師常用面試題.pdf
| 留言與評論(共有 0 條評論) |