C++學習筆記(From慕課網)

(慕課網視頻學習--C++離港篇的學習memo)
1: 函數的參數默認值,只能在最右邊。 若是有三個參數,只有中間一個有默認值,這是錯誤的。
 函數聲明的時候寫默認值,定義的時候不要寫。(有些編譯器會出錯。)
2:內聯函數:編譯時,將函數體實參和代碼替換掉調用語句。
       關聯字 inline
     內聯函數是建議性的,由編譯器決定。
     邏輯簡單,調用頻繁的建議使用內聯。
     遞歸函數不能成爲內聯函數。

3: 內存申請 new 內存釋放 delete 注意,釋放數組的時候,用 delete []p;
 申請可能失敗,
int *p = new int[100];
if(NULL == p){
    //內存申請失敗
}

注意,釋放完內存後,再將相應的指針賦值爲NULL;

4 string aaa = "Hello" + "world!"; // 這種定義是非法的,只能是常量+變量的形式。

5:類內定義的函數優先編譯成內聯函數!

------------------------------------------------------------------------------------
1: 構造函數 初始化列表
class Student{
public:
  Student():name("Tom""), age(33){}   //冒號開頭,多個變量的話,逗號隔開。
private:
  int age;
  string name;
}

注意: 初始化列表先於構造函數執行。 並且只能用於構造函數。
            常量只能用初始化列表初始化。
2: 拷貝構造函數。把一個對象賦值給另一個對象時,自動調用拷貝構造函數。
     若是沒有,則自動生成一個默認的拷貝構造函數。
3 析構函數 ~類名() 釋放內存等工做。
   不容許有參數。不能重載。沒有返回值。沒有的話,會自動生成一個默認的。

------------------------------------------------------------------------------------

C++繼承的時候,子類和父類有同名函數的時候
就說,子類的函數隱藏了父類的函數。
好比,父類是Person,子類是Solider
隱藏的函數是play()
調用子類的函數 solider.play();
調用父類的函數 solider.Person::play();
注意: 就算子類的函數play加上參數,也必須用上面的方式調用父類的函數。


若是用父類指針指向子類對象,那麼父類的析構函數應該定義成虛函數。virtual


若是B,C 繼承A, D繼承B,C
這種就叫作菱形繼承,這個時候,A 須要再內存中只有一份。
B,C須要使用虛繼承。 以下面代碼:
class B: virtual public A{};

------------------------------------------------------------------------------------
C++繼承的時候,子類和父類有同名函數的時候
就說,子類的函數隱藏了父類的函數。
好比,父類是Person,子類是Solider
隱藏的函數是play()
調用子類的函數 solider.play();
調用父類的函數 solider.Person::play();
注意: 就算子類的函數play加上參數,也必須用上面的方式調用父類的函數。

若是用父類指針指向子類對象,那麼父類的析構函數應該定義成虛函數。virtual

C++中的抽象類是經過純虛函數來實現。

數組

相關文章
相關標籤/搜索