C++第6版學習小結之第五章:回圈和關係表達式

2020-08-13 11:32:10

回圈和關係表達式

  1. 使用for回圈存取字串。size()獲得字串中的字元數;即定義一個字串A,A.size()得到字串大小。
  2. 型別別名。typedef typeName aliasName將後者作爲前者的別名
  3. c++新增了基於範圍的for回圈。這簡化了一種常見的回圈任務:對陣列(或容器類,如vector和array)的每一個元素執行相同的操作,如下:
    double prices[5] = {1.22, 2.33, 5.99, 7.21};
    for(double x : prices)
    {
    cout << x << endl;
    }
    該回圈顯示陣列中的每個值
    for(double &x : prices)
    {
    x = x * 0.80;
    }
    符號&表明x是一個應用變數,這種宣告讓接下來的程式碼能後修改陣列的內容,而第一種語法不能。
  4. cin在讀取char值時(cin >> ch),與讀取其它基本型別一樣,cin將忽略空格和換行符。cin.get(ch)讀取輸入中的下一個字元(包括空格),並將其賦給變數ch,使用這個函數呼叫替換cin >> ch,解決上述問題。
  5. 在C語言中,要修改變數的值,必須將變數的地址傳遞給函數。但是cin.get(ch)傳遞的是ch,而不是&ch。在C語言中這樣的程式碼無效,但在c++中有效,只要函數將參數宣告爲參照即可。參照是c++在c語言基礎上新增的一種型別。標頭檔案iostream將cin.get(ch)的參數宣告爲參照型別,因此該函數可以修改其參數的值。
  6. 在C語言中,如果函數接受char指針和int參數時,則使用該函數時,不能只傳遞一個參數(型別不同)。但在c++中,可以這樣做,因爲該語言支援被成爲函數過載的OOP特性。
  7. 函數過載允許建立多個同名函數,條件是他們的參數列表不同。函數過載允許對多個相關的函數使用相同的名稱,這些函數以不同方式或針對不同類型執行相同的基本任務。
  8. 檢測輸入末尾。使用EOF來檢測檔案尾並將這種資訊告知程式。如果檢測到EOF,cin.eof()將返回bool值true,否則返回false。
  9. 常見的字元輸入做法。每次讀取一個字元,直到遇到EOF的輸入回圈的基本設計如下:
    cin.get(ch);
    while (cin.fail() == false)
    {

    cin.get(ch);
    }
  10. C語言中的getchar()和putchar()仍然適用,只需包含標頭檔案stdio.h。也可以使用istream和ostream類中類似功能的成員函數。不接受任何參數的cin.get(),即ch = cin.get();該函數的工作方式與C語言中的getchar()相似,將字元編碼作爲int值返回;而cin.get(ch)返回一個物件,而不是讀取的字元。同樣,可以使用cout.put()函數來顯示字元;cout.put(ch)。
  11. 當函數到達EOF時,函數cin.get()將沒有可返回的字元。相反,cin.get()將返回一個用符號常數EOF表示的特殊值。EOF值必須不同於任何有效的字元值,通常被定義爲-1。因爲沒有ASCLL碼爲-1的字元,但並不需要知道實際的值,而只需在程式中使用EOF即可。
    char ch;
    cin.get(ch);
    whlie (cin.fail() == false)
    {
    cout << ch;
    ++count;
    cin.get(ch);
    }
    可以使用int ch,並用cin.get()代替cin.get(char),用cout.put()代替cout,用EOF測試代替cin.fail()測試:
    int ch;
    ch = cin.get();
    while (ch != EOF)
    {
    cout.put(ch);
    ++count;
    ch = cin.get();
    }
  12. get()的主要用途是能夠將stdio.h的getchar()和putchar()函數轉換爲iostream的cin.get()和cout.put()方法。只要用標頭檔案iostream替換stdio.h,並用作用相似的方法替換所有的getchar()和putchar()即可。