c++面试常考的知识点汇总
1. 鏈表和順序表的優缺點,在什么場合下適合順序表,什么場合下適合用鏈表。
1)順序表存儲原理:順序表存儲是將數據元素放到一塊連續的內存存儲空間,存取效率高,速度快。但是不可以動態增加長度優點:存取速度高效,通過下標來直接存儲,訪問速度快,通過下標訪問缺點:a.插入和刪除比較慢,b.不可以增長長度 比如:插入或者刪除一個元素時,整個表需要遍歷或移動元素來重新排一次順序 2)鏈表存儲原理:鏈表存儲是在程序運行過程中動態的分配空間,只要存儲器還有空間,就不會發生存儲溢出問題優點:插入和刪除速度快,保留原有的物理順序,比如:插入或者刪除一個元素時,只需要改變指針指向即可缺點:查找速度慢,因為查找時,需要循環鏈表訪問 3)應用場景:頻繁的查找卻很少的插入和刪除操作可以用順序表存儲,如果頻繁的插入和刪除操作很少的查詢就可以使用鏈表存儲2、什么是缺省參數?
定義所謂缺省參數,顧名思義,就是在聲明函數的某個參數的時候為之指定一個默認值,在調用該函數的時候如果采用該默認值,你就無須指定該參數。缺 省參數使用主要規則:調用時你只能從最后一個參數開始進行省略,換句話說,如果你要省略一個參數,你必須省略它后面所有的參數,即:帶缺省值的參數必須放在參數表的最后面。 缺省值必須是常量。顯然,這限制了缺省參數的數據類型,例如動態數組和界面類型的缺省參數值只能是 nil;至于記錄類型,則根本不能用作缺省參數。 缺省參數必須通過值參或常參傳遞。聲明是帶有缺省參數的函數,則缺省值只能寫在聲明當中。1). 如果函數已經帶有缺省參數的函數原型聲明,則在該函數的定義中不允許出現缺省值。 2). 一旦為函數的某個參數指定了缺省值,則必須為后續參數也定義缺省值,從右到左定義缺省參數。void showmessage(char *text,int length=1,int color ) ; //錯color也應定義缺省值。 3). 調用函數時,如果略去一個參數傳遞,則略去后續所有參數傳遞,調用時將參數從左至右,逐一傳遞給行參。showmessage("hello");showmessage("hello",5);showmessage("hello",5,8);showmessage("hello", ,8); // 錯誤5、什么是引用? 引用有什么作用? 引用和指針有什么區別?
6、什么是函數重載,函數重載底層是怎么實現的? C語言中為什么不能支持函數重載?extern “C” 是什么意思?
7、列出常見的函數調用約定?
8、什么命名空間?它有什么用?
9、什么是結構體?結構體是如何進行內存對齊的? 結構體有什么作用?
10、C++中類和結構體有什么區別? C語言中結構體和C++中結構體有什么區別?
11、寫一個函數:獲取結構體中某個成員相對于結構體起始位置的偏移
12、什么是類?如何定義一個類?C++有幾種訪問限定符? C++的三大特性?什么是封裝?
13、C++有幾種作用域?分別是什么?
14、空類的大小是多少?為什么?
15、什么是this指針?this指針具有什么特性?C++是如何將成員函數和對象綁定在一起的?
16、什么是構造函數?構造函數的作用?構造函數有什么特性?在什么時候調用的?什么是缺省的構造函數?編譯器在什么情況下會合成缺省缺省的構造函數?假如類中已經定義了構造函數? 編譯器還會在合成嗎?
17、什么是初始化列表?類中的數據成員是怎么來初始化的?那些數據成員必須要在類的初始化列表中初始化?為什么?
18、explicit關鍵字是什么意思?
19、什么是拷貝構造函數?拷貝構造函數是在什么時候調用的?為什么拷貝構造函數的參數必須是引用?如果不是引用,會造成什么后果?
20、什么是析構函數,析構函數有什么特性?在什么時候掉用的?
21、什么是運算符重載?運算符重載有什么特性?那些運算符不能重載?如何重載=和<<、>>運算符?運算符重載時要注意什么?[]、–>、前置++和后置++重載
22、什么是友元,友元有什么特性? 友元的優缺點?
23、什么是類的靜態成員?靜態數據成員會不會計算在對象的大小中?它有什么特性?靜態成員函數中可以調用非靜態成員函數嗎?非靜態成員函數中可以調用靜態成員函數嗎? 為什么?
24、C/C++中的const有什么區別? const修飾類的成員函數時又什么作用?可以修飾類的構造函數嗎? 可以修飾普通的全局函數嗎? const對象可以調用非const的成員函數和const成員函數嗎?非const對象可以調用const成員函數和非const成員函數嗎?const成員函數可以調用非const和const成員函數嗎?非const成員函數可以調用const和非const成員函數嗎? 為什么?
25、什么是內斂函數?內斂函數有什么優缺點?內斂函數和宏函數有什么區別?既然宏有缺陷為什么C++中沒有將宏去掉呢?
26、說說C語言內存管理方式,C++內存管理方式,malloc/realloc/calloc之間的區別?Malloc/free和new/delete new[]/delete[] 之間的區別?
27、什么是操作符new,new 操作符和定位表達式? 定位表達式一般是怎么用的?
28、什么是深拷貝淺拷貝? 給出String類普通版/簡潔版/引用計數版三種不同處理方式
29、什么是繼承? private、protected和public三種繼承方式之間的區別? 什么是賦值兼容規則?什么是Is-a,什么是has-a? 繼承體系中構造函數和析構函數的調用順序?友元和靜態成員是否可以繼承? 理解單繼承、多繼承、菱形繼承、菱形虛擬繼承的對象模型
30、什么是多態? 多態的實現原理? 什么是虛表,虛表使用來干什么的? 多態調用時怎么來實現的?什么是動態綁定和靜態綁定?多態有什么優缺點? 什么是重載、覆蓋,重寫?掌握帶有虛函數的單繼承、多繼承、菱形繼承以及菱形虛擬繼承的對象模型,什么是純虛函數?什么是抽象類?
31、什么是泛型編程,函數模板的概念、實例化,模板的參數推演,模板參數列表,函數模板的重載,實例化;類模板,類模板的實例化,特化以及類型萃取? 什么是模板的分離編譯?
32、auto_ptr、scoped_ptr、shared_ptr的區別?什么是智能指針的循環引用? 為什么要定制刪除器,如何定制?
33、寫出C++中的四種類型轉化
34、什么是異常,異常的剖出和捕獲,異常捕獲的匹配規則,異常規范
總結
以上是生活随笔為你收集整理的c++面试常考的知识点汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: facenet lfw训练
- 下一篇: VC内存对齐准则(Memory alig