1. 程式人生 > >【心得】面向對象_1

【心得】面向對象_1

等於 str 復制 內存 靜態全局變量 失效 變量 成員函數 鏈接錯誤

構造函數

  • 類自帶兩種構造函數:拷貝構造函數與無參構造函數。
  • 類有3種構造函數:一般構造函數,復制構造函數,轉換構造函數。
  • 自己寫的任何一個構造函數都會讓類自帶的對應種類的構造函數失效。
  • 構造函數的其他寫法:Base(int a, int b) :age(a), name(b) {};
  • 構造函數的調用方法:
    • 基礎方法
      • Base one(...,...,...)
      • Base one=new Base(...,...,...)
    • 無參構造函數:Base(){};
      • Base one
    • 轉換構造函數:Base(int a){};
      • Base one = 1
    • 鬼畜的轉換構造函數:Base(int a,int b){};
      • Base one = {1,2}; ???不是很能理解為什麽可以這麽寫???
    • 不能是轉換構造函數的一般構造函數:explicit Base(int a){};
  • 默認的拷貝構造函數是淺拷貝,就是說把函數的指針指向要拷貝的類的內存。
  • 繼承中的構造函數 TODO

析構函數

  • 虛析構函數 :
    • 當父類的析構函數不聲明成虛析構函數的時候,當子類繼承父類,父類的指針指向子類時,delete掉父類的指針,只調動父類的析構函數,而不調動子類的析構函數。
    • 當父類的析構函數聲明成虛析構函數的時候,當子類繼承父類,父類的指針指向子類時,delete掉父類的指針,先調動子類的析構函數,再調動父類的析構函數。
  • 繼承中的析構函數 TODO

staic

  • 所有的靜態變量都等於一個全局變量。
  • 靜態變量的生存周期為整個程序。
  • 靜態局部變量的和普通局部變量一個,只能在那個局部被調用。
  • 靜態全局變量只能在同一個文件內被調用。(可以避免不同文件的相同變量的鏈接錯誤)
  • 類靜態成員變量只能在類外初始化。
  • 類靜態成員變量對於所有的類只有一份。
  • 類靜態成員函數只能調用類裏的靜態變量。

【心得】面向對象_1