標籤:通過 儲存 virt 自己的 關係 訪問 log ase 虛函數
物件導向具有三個特徵:資料抽象,繼承和動態綁定,用類進行資料抽象,用類派生一個類繼承另外一個類,衍生類別繼承基類的成員,動態綁定使編譯器能夠決定是使用基類中定義的函數還是派生中定義的函數,
1.繼承
繼承使衍生類別(dervied class)能夠繼承基類(base class)定義成員,可以無需改變與衍生類別不相關的操作,衍生類別可以重定義那些與衍生類別型相關的成員函數,將函數特化,通過定義基類來派生更多的成員,基類必須指出希望衍生類別重定義那些函數,可以定義virtual的函數基類重新定義。
2.動態綁定(dymanatic binding)能夠編寫使用繼承層次中的任意類型的對象,無需關心對象的類型.
3.virtual與其他成員函數
c++預設不使用動態綁定,當要出發動態綁定時,通過指定虛函數成員進行動態綁定,成員預設為非虛函數,非虛函數不進行動態綁定;第二必須通過基類類型的引用或指標進行函數調用
4.預設實參與虛函數
虛函數也有預設實參,如果有用在給定調中的預設實參值,該值在編譯時間確定;
如果一個調用省略了具有預設值的實際參數,則所用的值有調用該函數的類型定義,與對象的動態類型無關
通過基類的引用或指標調用虛函數,則預設實參是在衍生類別的版本中聲明的值,
5.友元關係
不能繼承,基類的友元對衍生類別沒有特殊存取權限,如果基類被授予友元關係,則只有基類具有特殊存取權限.
//訪問對方保護類
class FC{friend class Frnd;public:FC();private:protected:int i;};class Dl :FC {friend class FC;public :int getFc(FC f) { return f.i; }private:};class Frnd {public:int mem(FC b) { return b.i; }int men();private:int dc;};
6.繼承靜態成員
如果基類定義了static成員,則整個繼承層次中只有一個成員,無論派生多少類,每個static只有一個執行個體
7.建構函式和複製控制
每個衍生類別對象由衍生類別定義成員中加上一個或者多個基類子物件構成,這會影響著衍生類別對象的構成.
7.2重構
重構包括重新定義類層次,將操作或資料類轉移,重構改變後代碼必須重新編譯
7.3尊重基類介面
建構函式只能初始化直接基類的原因每個定義了自己的介面,一旦定義所有的互動通過該介面.
8虛構析函數
刪除動態指派至,需要解構函式釋放記憶體之前清楚對象,在繼承層次中,指標的靜態類型刪除不同時需要解構函式,清楚基類成員而必須為虛函數
9.控制代碼類
通過定義控制代碼(handlde)和封裝(cover)來儲存管理類指標,指標指向對象可以變化,虛成員的行為在運行時根據控制代碼訪問繼承操作.
c++||OOP