1. 程式人生 > >c++面試常考的知識點彙總

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、什麼是異常,異常的剖出和捕獲,異常捕獲的匹配規則,異常規範