簡介
: 「繼承」就是在已存在的類的基礎上建立乙個新的類。 已存在的類稱為「基類」或者「父類」,新建的類稱為「派生
類」或「
子類」。是物件導向程式設計使**可以復用的最重要的手段,它允許程式設計師在保持原有類特性的基礎上進行擴充套件,增加功能。
方式:
public: 基類訪問許可權保持不變
private:基類的公有成員和保護成員稱為派生類的私有成員
protected:
三種方式的比較:
繼承的定義格式:
class 派生類:繼承型別(public/private/protected)基類名
分類:
單繼承:
從乙個基類派生的繼承稱為單繼承
舉例:
};class derived :public base //derived 是base的公有派生類,base 是derived 的基類
void display()
private:
int _d;
};多繼承: 從多個基類派生的繼承稱為多繼承。
舉例:
class base1
void display()
private:
int _ba;
};class base2
void display()
private:
int _b;
};class derived :public base1,protected base2 // derived 公有繼承base1,保護繼承base2
void display()
private:
int _d;
};
菱形繼承
:兩個子類繼承同乙個父類,而又有子類同時繼承這兩個子類(多繼承的一種特殊情況)
舉例:
};這裡出現乙個問題:當我想呼叫a類中的display函式,呼叫不了!為什麼呢?
解析:base1繼承a,那麼base1裡面肯定包含屬於a的部分();base2也同樣如此。我在呼叫a中的display函式,就會產生 到底呼叫哪個類中函式呢,所以系統會給出呼叫不明確的錯誤。
就覺上面的問題(
菱形繼承的二義性和資料冗餘的問題
),就會談到
虛繼承
虛繼承
概述:
為了解決從不同途徑繼承來的同名的資料成員在記憶體中有不同的拷貝造成資料不一致問題,將共同基類設定為虛基類。這時從不同的路徑繼承過來的同名資料成員在記憶體中就只有乙個拷貝,同乙個函式名也只有乙個對映。
虛繼承使用:
class 派生類名:virtual 繼承方式 基類名
virtual是關鍵字,宣告該基類為派生類的虛基類。
注意:
1、在多繼承情況下,虛基類關鍵字的作用範圍和繼承方式關鍵字相同,只對緊跟其後的基類起作用。
2、宣告了虛基類之後,虛基類在進一步派生過程中始終和派生類一起,維護同乙個基類子物件的拷貝。
虛基類:
當在多條繼承路徑上有乙個公共的基類,在這些路徑中的某幾條匯合處,這個公共的基類就會產生多個例項(或多個副本),若只想儲存這個基類的乙個例項,可以將這個公共基類說明為虛基類。
虛繼承語法使用:
class 派生類: virtual 基類1,virtual 基類2,...,virtual 基類n
;舉例說明:
class a
void display()
private:
int _a;
};class base1:virtual public a //虛繼承 a為虛基類
void display()
private:
int _ba;
};class base2 :virtual public a //虛繼承 a為虛基類
void display()
private:
int _b;
};class c :virtual public base1,virtual public base2 //虛繼承 base1、base2是虛基類
void display()
private:
int _c;
};
測試:
int main()
結果:
呼叫成功!
c 入門之繼承
1.b繼承了a b也有name和adress這兩個字段 此時 a為b的基類 public class a public class b a2.c雖然不是直接從a派生出來的,但它繼承了a的成員 public class a public class b a public class c b3.基類的所...
C 繼承入門
class 派生類 子類 名稱 繼承方式名 如public 基類 父類 名稱 1 公有繼承 public 當乙個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過呼叫基類的公有和保護成員來訪問。對於基類的保護成...
C 入門1 2 繼承
class derivedclass baseclass 乙個類最多隻允許從乙個其他類派生 derivedclass還可以派生出更多的類。不需要也不能顯式指定繼承是公共 私有還是保護,因為c 的繼承都是公共的。派生類包含基類所有的方法和字段。在派生類中呼叫基類構造器來進行基類欄位的初始化。class...