1. 程式人生 > >C++知識點總結篇

C++知識點總結篇

const在不同位置時的不同意義

  • 指標型別前:宣告一個指向常量的指標,程式中不能通過指標來改變它所指向的值,但指標本身的值可以改變,即指標可以指向其他資料;
  • "*"號和指標名之間,宣告一個指標常量(常指標),指標本身的值不可改變,即不能指向其他資料,但指向的資料的值可以改變;
  • 兩個地方都加,宣告指向常量的指標常量,指標本身的值不可改變,指向的資料也不能通過指標改變;

####函式指標

  • 使用函式指標之前,必須先賦值,使它指向一個函式入口地址,賦值語法格式為:函式指標名 = 函式名,其中函式名代表的函式必須是一個已經定義過的,和函式指標具有相同返回型別的函式,指標呼叫函式格式:(*指標變數)(實參列表);

訪問許可權

  • public:可被任意實體訪問;
  • protected:只允許本類及子類的成員函式訪問;
  • private:只允許本類的成員函式訪問;

建構函式

  • 建立物件時,自動呼叫建構函式,不能在程式中直接呼叫,可有任意型別引數,但不能有返回型別;
  • 建構函式作用:為物件分配空間、為資料成員賦初值、請求其他資源;
  • 建構函式工作:初始化虛擬函式表、建立基類物件、建立非靜態資料成員物件、安置虛基類物件資訊、執行建構函式體中的程式碼;
  • 若一個類中沒有定義建構函式,編譯器會自動生成不帶引數的預設建構函式,格式為:
<類名>::<預設建構函式名>()
{
}

解構函式

  • 解構函式作用:清除物件、釋放記憶體;
  • 解構函式工作:執行解構函式中的程式碼、將物件佔據的儲存空間歸還系統、做公共及使用者要求的善後工作;
  • 解構函式無引數和返回值,一個類中只能定義一個解構函式,故不能過載,格式為:
~<類名>();

記憶體佈局

  • 全域性資料區:存放全域性變數、靜態資料、常量;
  • 程式碼區:存放類成員函式、其他函式程式碼;
  • 棧區:存放區域性變數、函式引數、返回資料、返回地址;
  • 堆區:自由儲存區;

運算子過載過載形式

  • 過載為類的成員函式,引數個數比原來的運算數少一個
<函式型別> operator <運算子> (<形參列表>)
{
<函式體>;
}
  • 過載為類的友元函式,引數個數與原運算數個數一樣多;
friend <函式型別> operator <運算子> (<形參列表>)
{
<函式體>;
}
  • 函式過載:返回值型別可以相同可以不同,但形參列表一定不同;

靜態資料成員

  • 初始化格式:<型別><類名>::<靜態資料成員>=<值>;
  • 引用格式:<類名>::<靜態資料成員>;

繼承方式

  • 私有繼承private:父類的公有成員和保護成員作為子類的的私有成員,且不能被子類的派生類訪問;
  • 公有繼承public:父類的公有成員和保護成員作為子類的成員時,仍保持原有狀態,父類私有成員仍為私有;
  • 保護繼承protected:父類的公有成員和保護成員成為子類的保護成員,且只能被他的派生類成員函式或友元訪問,父類私有成員仍為私有;

####派生類建構函式呼叫順序:

  • 呼叫基類的建構函式,呼叫順序按繼承時說明的順序;
  • 呼叫子物件類的建構函式,呼叫順序按在類中說明的順序;
  • 派生類建構函式體中內容;

函式模版

template < 模板形參表 >template <typename T>
返回值型別 函式名(形式引數列表)
{
    函式體語句
}
例:
template <typename T>
void swap( T& v1, T& v2)
{
    T temp;
    temp = v1;
    v1 = v2;
    v2 = temp;
}

虛擬函式

  • 虛擬函式必須是類的成員函式,不能是友元,但可以是另一個類的友元,不能為全域性函式,也不能為靜態函式,解構函式可以為虛擬函式,但建構函式不能為虛擬函式;

變數初始化

  • 區域性變數:定義時,系統不會進行初始化;
  • 全域性變數:定義時,系統自動初始化,

友元函式

  • 在類中定義過,但不是成員函式,定義在類外部,但有權訪問類中成員;

this指標

  • 只有成員函式才有this指標,友元函式沒有this指標;

靜態成員函式與普通成員函式區別:

  • 靜態成員函式沒有this指標,只能訪問靜態成員(包括靜態成員變數和靜態成員函式);
  • 普通成員函式有this指標,可以訪問類中任意成員,而靜態成員函式無this指標;