(慕課網視頻學習--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++中的抽象類是經過純虛函數來實現。
數組