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;