1. 程式人生 > 其它 >C++基礎00-入門知識補充

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

函式的引數傳遞

說明:

  1. 在函式被呼叫時才分配形參的儲存單元
  2. 實參可以是常量、變數或表示式
  3. 實參型別必須與形參相符
  4. 值傳遞是傳遞引數值,即單向傳遞
  5. 引用傳遞可以實現雙向傳遞
  6. 常引用作引數可以保證實引數據的安全

含有可變引數的函式

C++標準中提供了兩種主要的方法

  • 如果所有的實參型別相同,可以傳遞一個名為initializer_list的標準庫型別
  • 如果實參的型別不同,我們可以編寫可變引數的模板

關於可變引數的模板,我們將在 模板與群體資料 部分講解

initializer_list:

一種標準庫型別,用於表示某種特定型別的值的陣列,該型別定義在同名的標頭檔案中

initializer_list提供的操作:

方法 用途
initializer_listlst; 預設初始化;T型別元素的空列表
initializer_listlst{a,b,c...} 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

編譯時在呼叫處用函式體進行替換,節省了引數傳遞、控制轉移等開銷

注意:

  1. 行內函數體內不能有迴圈語句和switch語句
  2. 行內函數的定義必須出現在行內函數第一次被呼叫之前
  3. 對行內函數不能進行異常介面宣告

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
}