C C 一些常見的面試題(二)

2021-10-03 21:45:51 字數 2340 閱讀 8320

1.為什麼拷貝建構函式account(const account & other)不能寫成account(const account other)?

答:如果不傳入引用,函式傳參過程中系統會呼叫一次複製操作,即會呼叫一次拷貝建構函式,而該拷貝建構函式又是引數傳遞,就會呼叫拷貝建構函式,這樣就會進入乙個死迴圈。

2.c++拷貝建構函式的淺拷貝和深拷貝區別?

答:淺拷貝和深拷貝主要區別就是複製指標時有沒有重新建立記憶體空間。

淺拷貝在類裡面有指標成員的情況下只會複製指標的位址,會導致兩個成員指向同一塊記憶體,這樣要是在分別dele釋放時會出現問題,因此需要深拷貝。

3.什麼是「引用」?宣告和使用「引用」要注意哪些問題?

答:引用是某個變數名的別民,對應用的操作和對變數的直接操作效果相同,宣告乙個引用的時候,一定要初始化,引用完畢後,目標變數名有兩個名稱,即引用名和目標原名稱,不能把引用名作為其他變數名的別名。引用不占用儲存單元,不能建立陣列的引用。

4.c++中的空類,預設產生哪些類成員函式?

答:建構函式、拷貝建構函式、析構函式、賦值運算子,取值運算子

5.多型的作用?

答:1. 隱藏實現細節,**模組化,擴充套件**模組,實現**重用?

2.為了類在繼承和派生的時候,保證使用家族中任一類的例項的某一屬性時的正確呼叫 -

6.類成員函式的過載、覆蓋和隱藏區別?

過載:1.相同的範圍(同乙個類中)

2.函式名字相同

3.引數不同

4.virtual關鍵字可有可無

覆蓋:1.不同的範圍(分別位於基類和派生類中)

2.函式名字相同

3.引數相同

4.基類函式中必須要有virtual關鍵字

7.物件導向程式設計的優點?

答:開發時間短,效率高,可靠性高。物件導向的**具有很高的可重用性,可以在應用程式中大量採用成熟的類庫(stl),縮短開發時間,軟體易於公升級和維護。

8.什麼是單例?

答:保證乙個類中只有乙個例項,並提供乙個它的全域性訪問點,該例項並所有程式模組共享。

9.c++中new-delete與malloc-free區別?

答:new建立的是乙個物件 malloc是申請一塊記憶體

malloc-free是c/c++的標準庫函式,new-delete是c++的運算子,他們都可以用於申請動態記憶體分配和釋放記憶體。

對於非內部資料型別,malloc-free無法滿足動態物件的要求,物件在建立時自動呼叫拷貝建構函式,物件在銷毀時自動呼叫析構函式,malloc-free是標準庫函式,不在編譯器控制許可權內,不能把執行建構函式和析構函式的任務強加於malloc-free,因此c++需要new-delete來完成動態記憶體分配申請和釋放。

new可以認為是malloc加建構函式的執行,new出來的指標是帶有型別資訊的,malloc返回的都是void *指標,new-delete 基本實現了malloc-free的函式

new建立的物件,用成員函式訪問,不要直接訪問它的位址空間

malloc分配的是一塊記憶體區域,用指標訪問,還可以移動指標。

10.宣告內聯函式的規則?

答:含有遞迴呼叫的函式、迴圈語句、switch-case語句 不能用inline

由於inline增加體積的特性,建議inline函式內的**短小,不超過五行。

特定情況下,編譯器不會理會inline關鍵字,強制讓函式成為普通函式,出現這種情況,編譯器會丟擲乙個警告。

呼叫內聯函式之前,這個函式一定要宣告或定義為inline,否則,這個函式就沒有實現inline。

11.巨集與函式的區別?

答:內聯函式在執行可除錯,而巨集定義不行

編譯器會對內聯函式的引數型別進行安全檢查或轉化為普通函式,巨集定義不行

內聯函式可以訪問類的成員變數,巨集定義不行

在類中宣告並且定義乙個成員函式,自動轉化為內聯函式。

12.extern 作用?

答:c/c++中,宣告全域性變數

c++檔案呼叫c方式編譯的函式

13.介紹一下stl,簡單說明stl如何實現vector?

答:stl(標準模板庫),由容器演算法迭代器組成

優點:方便容易地實現資料的搜尋和排序等一系列演算法 

除錯程式時更加安全和方便

vector實質上是動態陣列,會根據資料的增加而增加陣列空間

14.c++在main()函式之前執行什麼?

答:全域性物件的建構函式

15.const和#define區別?

答:const常量有資料型別,編譯器對const有安全檢查

巨集常量沒有資料型別,只進行簡單的字元替換,沒有安全檢查

有些整合化的工具對const常量進行除錯,對巨集常量沒不能進行除錯

16.什麼是多型?怎麼實現?

答:多型:乙個介面的多種方法

C C 一些常見的面試題(三)

1 析構函式的特點?答 2 c語言中static關鍵字的用途?答 3 區域性變臉是否可以和全域性變臉同名,如果不可以會出現什麼錯誤?如果可以,系統如何解決這種衝突發生?答 可以同名。如果區域性變數與全域性變數同名,有區域性變數的作用域,使用區域性變數,其他作用域則使用全域性變數。4 堆和棧的區別?答...

C C 程式設計 一些面試題

1 如何判斷程式是c程式還是cpp程式 根據巨集 cplusplus include using namespace std void main 2 c 和c的不同 3 引用和指標的區別 4 int id sizeof int const int a 5 int b a int c 5 const ...

一些常見的演算法面試題

第一題 求乙個數字陣列中連續 從小到大 的且長度大於n的子陣列 public static void main string args int lenght 4 暫定義n的長度為4 int count 0 每次迴圈連續元素的個數 int i 0 int nums 0 迴圈次數 for i lengh...