C++基礎00-入門知識補充
基礎知識 | C++基礎
本頁是對C++相關知識在 類與物件 前的彙總,便於回憶,將知識盲區記錄如下
資料輸入輸出
流:資料從一個物件到另一個物件的流動,使用前要被建立,使用後被刪除
提取操作:從流中獲取資料的操作
插入操作:向流中新增資料的操作
常見的I/O流類庫操縱符:
操縱符名 | 含義 |
---|---|
dec | 數值資料採用十進位制表示 |
hex | 數值資料採用十六進位制表示 |
oct | 數值資料採用八進位制表示 |
ws | 提取空白符 |
endl | 插入換行符,並重新整理流 |
ends | 插入空字元 |
setprecision(int) | 設定浮點數的小數值位數(包括小數點) |
setw(int) | 設定域寬 |
選擇結構
switch語句:
case分支可包含多個語句,且不用{}
表示式、判斷值都是int型或char型
如果若干分支執行內容相同可共用一組語句
case語句後的表示式不能是變數
自定義型別
類型別名:為已有型別另外命名
-
typedef
已有型別名 新型別名錶
-
using
新型別名 = 已有型別名
列舉型別(不限定作用域)
除此還有限定作用域的enum類,將在 類與物件 部分介紹
-
定義方式
將全部可取值一一列舉出來
-
語法形式
//enum 列舉型別名 {變數值列表}; enum Weekday {SUN,MON,TUE,WED,THU,FRI,SAT};
其中預設情況下,
SUN = 0, MON = 1, TUE = 2, ......, SAT = 6
函式的引數傳遞
說明:
- 在函式被呼叫時才分配形參的儲存單元
- 實參可以是常量、變數或表示式
- 實參型別必須與形參相符
- 值傳遞是傳遞引數值,即單向傳遞
- 引用傳遞可以實現雙向傳遞
- 常引用作引數可以保證實引數據的安全
含有可變引數的函式
C++標準中提供了兩種主要的方法
- 如果所有的實參型別相同,可以傳遞一個名為initializer_list的標準庫型別
- 如果實參的型別不同,我們可以編寫可變引數的模板
關於可變引數的模板,我們將在 模板與群體資料 部分講解
initializer_list:
一種標準庫型別,用於表示某種特定型別的值的陣列,該型別定義在同名的標頭檔案中
initializer_list提供的操作:
方法 | 用途 |
---|---|
initializer_list |
預設初始化;T型別元素的空列表 |
initializer_list |
lst的元素數量和初始值一樣多;lst的元素是對應初始值的副本; |
lst2(lst) | 拷貝或賦值一個initializer_list物件但不拷貝列表中的元素;拷貝後原始列表和副本共享元素 |
lst2 = lst | 同上 |
lst.size() | 列表中的元素數量 |
lst.begin() | 返回指向lst首元素的指標 |
lst.end() | 返回指向lst尾元素下一位置的指標 |
使用方法:
initializer_list是一個類模板
使用模板時,我們需要在模板名字後面跟一對尖括號,括號內給出型別引數
//例
initializer_list<string> ls;//initializer_list的元素型別是string
initializer_list<int> li;//initializer_list的元素型別是int
比較特殊的一點:此類模板中的元素永遠是常量值,我們無法改變此類(initializer_list)物件中元素的值
含有initializer_list形參的函式也可以同時擁有其他形參
使用場景:
- 在編寫程式碼輸出程式產生的錯誤資訊時,最好統一用一個函式實現功能,使得對所有錯誤的處理能夠整齊劃一(然而錯誤資訊的種類不同,呼叫錯誤資訊輸出函式時傳遞的引數也各不相同)
- 使用initalizer_list編寫一個錯誤資訊輸出函式,使其可以作用於可變數量的形參
行內函數
宣告時使用關鍵字 inline
編譯時在呼叫處用函式體進行替換,節省了引數傳遞、控制轉移等開銷
注意:
- 行內函數體內不能有迴圈語句和switch語句
- 行內函數的定義必須出現在行內函數第一次被呼叫之前
- 對行內函數不能進行異常介面宣告
constexpr函式
語法規定:
- constexpr修飾的函式在其所有引數都是constexpr時,一定返回constexpr
- 函式體中必須有且僅有一條return語句
//例
constexpr int get_size() {return 20;}
constexpr int foo = get_size();//正確:f
帶預設引數值的函式
預設引數值:
可以預先設定預設的引數值,呼叫時如給出實參,則採用實參值,否則採用預先設定的預設引數值
//例
int add(int x = 5,int y = 6) {
return x + y;
}
int main() {
add(10,20);//10+20
add(10);//10+6
add(0);//5+6
}
預設引數值的說明次序:
有預設引數的形參必須列在形參列表的最右,即預設引數值的右面不能有無預設值的引數(呼叫時實參與形參的結合次序是從左向右)
//例
int add(int x,int y = 5,int z = 6);//正確
int add(int x = 1,int y = 5,int z);//錯誤
int add(int x = 1,int y,int z = 6);//錯誤
預設引數值與函式的呼叫位置:
如果一個函式有原型宣告,且原型宣告在定義之前,則預設引數值應在函式原型宣告中給出;如果只有函式的定義,或函式定義在前,則預設引數值可以在函式定義中給出
//例1
int add(int x = 5,int y = 6);
//原型宣告在前
int main() {
add();
}
int add(int x,int y) {
//此處不能再指定預設值
return x + y;
}
//例2
int add(int x = 5,int y =6){
//只有定義,沒有原型宣告
return x + y;
}
int main() {
a
}