C++學習筆記---面向對象編程

一、類
1、構造函數和構造函數初始化列表

對非內置類型成員變量,爲了避免兩次構造,推薦使用類構造函數初始化列表。但有的時候必須用帶有初始化列表的構造函數:
1.成員類型是沒有默認構造函數的類。若沒有提供顯示初始化式,則編譯器隱式使用成員類型的默認構造函數,若類沒有默認構造函數,則編譯器嘗試使用默認構造函數將會失敗。
2.const成員或引用類型的成員。因爲const對象或引用類型只能初始化,不能對他們賦值。

初始化數據成員與對數據成員賦值的含義是什麼?有什麼區別?
首先把數據成員按類型分類並分情況說明:
1.內置數據類型,複合類型(指針,引用)
在成員初始化列表和構造函數體內進行,在性能和結果上都是一樣的
2.用戶定義類型(類類型)
結果上相同,但是性能上存在很大的差別。因爲類類型的數據成員對象在進入函數體前已經構造完成,也就是說在成員初始化列表處進行構造對象的工作,調用構造函數,在進入函數體之後,進行的是對已經構造好的類對象的賦值,又調用個拷貝賦值操作符才能完成(如果並未提供,則使用編譯器提供的默認按成員賦值行爲)

二、面向對象編程
1、C++支持多重繼承,即一個類可以派生於多個基類;

2、動態綁定
第一、只有指定爲虛函數的成員函數才能進行動態綁定,成員函數默認爲非虛函數,非虛函數不進行動態綁定;
第二、必須通過基類類型的引用或指針進行函數進行調用;

例如:在基類中book函數不是virtual,在派生類中即使定義了自己的book函數版本,在派生類中調用book也是調用基類中的版本;

3、訪問控制和繼承
在基類中,public和private標號具有普通含義:用戶代碼可以訪問類的public成員而不能訪問private成員,private成員只能由基類的成員和友元訪問。派生類對基類的public和private成員的訪問權限與程序中憑單其它部分一樣:它可以訪問public成員而不能訪問privat成員
有時作爲基類的類具有一些成員,它希望允許派生類訪問但仍禁止其它用戶訪問這些成員。對於這樣的成員應使用受保護的訪問標號(protected),protected成員可以被派生類對象訪問但不能被該類型的普通用戶訪問。

4、公用、私有和受保護的繼承:
如果是公用繼承,基類成員保持自己的訪問級別:基類的public成員爲派生類的Public成員,基類的protected成員爲派生類的protected成員。
如果是受保護繼承,基類的Public和protected成員在派生類中爲protected成員。
如果是私有繼承,基類的所有成員在派生類中爲private成員
class Public_devived : public Base
{
};
class Private_devived : public Base
{
};

5、基類到派生類的轉換:
當基類指針或引用實際綁定到派生類對象時,從基類到派生類的轉換也存在限制。在這種情況下,如果知道從基類到派生類的轉換是安全的,就可以使用static_cat強制編譯器進行轉換。或者可以用dynamic_cast申請在運行時進行檢查。
構造函數和複製控制成員不能繼承,每個類定義自己的構造函數和複製控制成員。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章