1. 程式人生 > >C++面試基礎知識複習系列——一

C++面試基礎知識複習系列——一

1、const關鍵字的作用。

1>修飾變數,說明該變數不可修改;

2>修飾指標,分為常量指標與指標常量。

example1:

int* const p=&a;指標常量,*p=8,ok;p=&b,錯誤;

example2:

const int *p=&a;常量指標,*p=8,錯誤;p=&b,OK;

3>修飾引用,常用於形參型別,即有利於拷貝,又避免了函式對值的修改;

4>修飾成員函式,說明該成員函式內不能修改成員變數。

2、static 關鍵字的使用。

1>修飾普通變數,修改變數的儲存區域與生命週期,使變數儲存在靜態區,在main函式之前就分配了空間,如果有初始值就用初始值去初始化它,沒有初始值就用系統預設值初始化之。

2>修飾普通的函式,表明函式的作用範圍(有疑問)。

3>修飾成員變數。所有該類的物件只儲存一個該變數,而且不需要生成物件就可以訪問該成員(靜態成員變數的記憶體分配?)。

4>修飾成員函式。不需要生成物件就可以訪問該函式,但是,在static函式內部不能訪問非靜態成員成員。

3、this指標。

1>this指標是一個隱含於成員函式中的特殊指標,它指向正在被該成員函式操作的那個物件;

2>this是右值,無法取址。

4、inline行內函數。

特點:

1>相當於把函式內容寫在呼叫行內函數的地方;

2>不用執行進入函式的步驟,直接執行函式體(?);

3>相當於巨集。但比巨集多了型別檢查;

4>不能包含複雜的操作;

5>類中除了虛擬函式都會被自動隱式轉換成行內函數。

5、虛擬函式能否是行內函數?

1>可以。但是當虛擬函式表現出多型的特性時,不能內聯;

2>內聯是編譯期內聯。而虛擬函式的多型性在執行期間,編譯器無法知道在執行期間呼叫哪個程式碼。

3>編譯器知道所呼叫的物件是哪個類時,可以將虛擬函式內聯。

6、assert;

7、sizeof(陣列名)/sizeof(指標);

8、#pragma pack(n)

9、位域;

10、extern

1>被extern限定的函式/變數是extern型別的。即這些變數/函式的定義在其他模組。

2>extern "C"的作用是讓C++編譯器將extern "C"宣告的程式碼當C語言處理。

11、union。

定義:是一種節省空間的特殊的類,一個union類可以有多個數據成員,但是在任意一個時刻只能有一個數據成員有值。當某個資料成員被賦值後,其他資料成員處於未定義狀態。

12、成員初始化列表。

1>高效?

2>有些場合必須要用初始化列表:

i、常量型別。因為常量型別只能初始化,不能賦值,因此必須放在初始化列表;

ii、引用型別。引用必需在定義的時候初始化,且不能重新被賦值,所以也要寫在初始化列表裡面;

iii、???

13、C++多型。靜態多型:函式過載;動態多型,虛擬函式;

14、虛擬函式?

1>普通函式(非類的成員函式)不能是虛擬函式;

2>靜態函式不能是虛擬函式;

3>建構函式不能是虛擬函式(因為在呼叫建構函式時,虛表指標並沒有在物件的記憶體空間中,必須要建構函式呼叫完成之後才能形成虛表指標)。

15、虛解構函式。

使用場合:

為了解決基類的指標指向派生類的物件,並用基類的指標刪除派生類的物件。

16、虛擬函式表。

參考:

1:https://mp.weixin.qq.com/s/u_CiVTGwv7m6lwl8XT7Dzw;2:https://mp.weixin.qq.com/s/fsA9p9GC5rkXZISeKknqbQ;