繼承是使代碼能夠複用的重要手段,也是面向對象程序設計的核心思想之一。設計
繼承就是不修改原有的類,直接利用原來的類的屬性和方法並進行擴展。原來的類稱爲基類,繼承的類稱爲派生類,他們的關係就像父子同樣,因此又叫父類和子類。code
通常格式以下:對象
class 派生類名 : 繼承類型 基類名
派生類成員能夠訪問基類的public成員和protected成員。繼承
繼承類型有三種,共有繼承(public),私有繼承(private)和保護繼承(protected)。接口
共有繼承:it
共有繼承的特色是基類成員在派生類中都保持原來的狀態table
私有繼承:程序設計
私有繼承的特色是基類中全部成員在派生類中都變爲私有成員class
保護繼承:擴展
private在派生類中依然存在,但不論以哪一種方法繼承基類,派生類都不能直接訪問基類的私有成員。
繼承方式 | 基類的public成員 | 基類的protected成員 | 基類的private成員 |
---|---|---|---|
public繼承 | public成員 | protected成員 | private成員 |
protected繼承 | protected成員 | protected成員 | private成員 |
private繼承 | private成員 | private成員 | private成員 |
for example:
class Base { //基類 public : int pub; private: int pri; protected : int pro; }; class A : public Base{ //public繼承 public : int a; void init() { a = pub; //能夠,依然爲public成員 a = pro; //能夠,依然爲protected成員 a = pri; //錯誤,基類的私有成員在派生類中是不可見的 } }; class B : protected Base{ //protected繼承 public : int b; void init() { b = pub; //能夠,變爲protected成員 b = pro; //能夠,依然爲protected成員 b = pri; //錯誤,基類的私有成員在派生類中是不可見的 } }; class C : private Base{ //private繼承 public : int c; void init() { c = pub; //能夠,變爲private成員 c = pro; //能夠,變爲private成員 c = pri; //錯誤,基類的私有成員在派生類中是不可見的 } }; int x; A a; x = a.pub; //能夠,public繼承的public成員是public的,對對象可見 x = a.pro; //錯誤,public繼承的protected成員是protected的,對對象不可見 x = a.pri; //錯誤,public繼承的private成員是private的,對對象不可見 B b; x = b.pub; //錯誤,protected繼承的public成員是protected的,對對象不可見 x = b.pro; //錯誤,protected繼承的protected成員是protected的,對對象不可見 x = b.pri; //錯誤,protected繼承的private成員是private的,對對象不可見 C c; x = c.pub; //錯誤,protected繼承的public成員是private的,對對象不可見 x = c.pro; //錯誤,protected繼承的protected成員是private的,對對象不可見 x = c.pri; //錯誤,protected繼承的private成員是private的,對對象不可見 return 0;