c++基礎知識整理(1)

  1. 函數的默認值從右往前寫(也就是說函數的默認值,右側必須都得有)。
  2. 函數的默認值一般寫在聲明中,函數定義可不用寫默認值(因爲編譯器的差別,有些在定義中默認值編譯器不能識別,默認值寫在聲明中卻能使所有編譯器都識別)。
  3. 函數重載的定義:在相同作用域下,擁有相同的函數名但函數的參數個數或參數類型不同的函數共稱爲函數的重載。
  4. 編譯器如何識別重載的函數:編譯器在編譯的時候,將重載函數的函數名修改爲 函數名參數類型參數類型形式來區分重載函數。
  5. 內聯函數:函數最前邊有關鍵字inline,將該函數稱之爲內聯函數。內聯函數的作用是編譯器在編譯階段將整個內聯函數體與調用函數替換,提高代碼運行效率。需注意:內聯函數的替換是程序員建議編譯器的,到底替不替換,編譯器自己做決定,所以說inline關鍵字是建議性的關鍵字;內聯函數不能替換遞歸,當然,就算你將遞歸函數標記爲內聯函數,編譯器也不會替換的;內聯函數體內的邏輯應當儘可能簡單;內聯函數省去了函數調用部分和返回部分,相比於函數調用,速度較快。
  6. 內存管理:通過調用new和delete運算符來實現向操作系統進行內存的申請和釋放。操作技巧:用new運算符申請內存後,需要判斷指向該內存的指針是否爲NULL,若爲NULL,就要進行異常處理。用delete釋放內存後,需要將指向該內存測指針指向NULL。
  7. 小技巧:做if語句條件判斷時,最好將常量放在 ==運算符之前,這樣可防止將比較運算符寫成賦值運算符。因爲若寫成賦值運算符,編譯器是不能編譯通過的。
  8. 類的實例化方法:一、在棧中實例化對象,形式爲:類名 對象名;二、在堆中實例化對象,形式爲:類名 * 指針名 = new 類名();在棧中實例化對象,編譯器自動在棧上分配存儲空間存儲對象,自動回收存儲空間。在堆中實例化對象,程序員爲對象在堆中分配內存存儲對象,銷燬對象時,程序員手動釋放堆中的存儲空間。
  9. 成員函數的調用方法:若是在棧中實例化的對象,調用形式爲:對象.成員函數名()和對象.數據成員;若在堆中實例化的對象,調用形式爲 指針名 -> 成員函數()和 指針名 -> 數據成員();
  10. 錯誤的string連接:”常量字符串” + “常量字符串” 錯誤,即常量字符串連接常量字符串是不被允許的。
  11. 面向對象的基本思想:以對象爲操作核心,來實現邏輯。
    12.成員函數的定義:分爲一、類內定義,即將函數體放在類內定義;二、類內聲明,類外定義,即只在類內進行聲明,將函數體放在類外定義。對於類內定義,編譯器會自動在函數頭加上inline關鍵字,使其變爲內斂函數。若將函數的聲明和實現放在一個文件中,即稱作同文件類外定義,若將類的聲明放在.h中,將類外定義放在.cpp中,即稱作分爲件類外定義。一般編寫C++程序時,我們需使用分爲件類外定義,這樣顯得更專業。需要注意的是在.cpp文件中我們需要加上頭文件#include “文件名.h”來將聲明包含在.cpp文件中,在使用時,也需要加上#include”文件名.h”。
  12. 類的不同對象共享同一代碼段,不同對象擁有不同的堆,棧。
  13. 構造函數:構造函數名與類同名,沒有返回值。對象在初始化時,自動調用構造函數。若用戶沒有定義構造函數,編譯器會自動生成。構造函數分爲普通構造函數和拷貝構造函數。普通構造函數可以重載,沒有參數的普通構造函數又稱作默認構造函數。
  14. 初始化列表:用來初始化類的數據成員。形式爲:類名(參數):數據成員(參數),數據成員(參數){}, 其特點爲:
    一、初始化列表先於構造函數體執行
    二、初始化列表可以初始化const類型,引用類型。
    三、初始化列表只能用於構造函數。
    使用初始化列表來初始化數據成員,會看起來更專業。
  15. 拷貝構造函數:調用拷貝構造函數的三種情況。一、當在棧中實例化一個對象,而初始化對象的參數是另一個對象時(直接初始化),二、或在堆中實例化一個對象,而將另一個對象複製給該對象(拷貝初始化),就會調用拷貝構造函數而不是普通構造函數。若程序員不定義拷貝構造函數時,編譯器會自動生成拷貝構造函數。拷貝構造函數的參數形式是有規定的,爲 對象名(const 類名 &形參名)。三、若調用函數的形參是對象時,若調用該函數,此時也會調用拷貝構造函數。
  16. 析構函數:沒有返回值,不能重載。若不定義,系統自動生成。作用是做資源回收工作。
  17. 命名空間的寫法:
    namespace 名稱
    {
    在該命名空間的代碼
    }
    在主函數前寫using namespace 名稱,是告訴編譯器,使用的是該命名空間的函數。
  18. C++小技巧:輸出x爲八進制:cout << oct << x << endl;
    輸出x爲十進制:cout << dec << x << endl;
    輸出x爲十六進制:cout << oct << x << ends;
    將布爾值以名字形式輸出: cout << boolalpha << x << endl;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章