一、公有(pulic)繼承
「繼承」是類的重要特性。a類繼承b類,我們稱b類為「基類」,也稱為「父類」,a類則相應地被稱為「派生類」或「子類」。a類繼承了b類之後,a類就具有了b類的部分成員。那麼,究竟從基類那兒得到了哪些成員,這由2方面決定,①繼承方式,②基類成員的訪問許可權(即public/private/protected)。
繼承有三種方式,即公有(public)繼承、私有(private)繼承、保護(protected)繼承。我們先討論最常用的公有繼承。
公有繼承就是將基類的公有成員變為自己的公有成員,基類的保護成員變為自己的保護成員。
#include
#include
using namespace std;
class cbase
int getage()
protected:
void setname(string s)
void setage(int i)
};class cderive : public cbase
};int main ( )
從上面的例子可以看出,對於公有繼承,基類的成員能否訪問,有以下特徵:
基類的私有成員:在派生類和外部都不可以訪問。
基類的保護成員:在派生類可以訪問,在外部不可以訪問。
基類的公有成員:在派生類和外部都可以訪問。
二、私有(private)繼承
私有繼承是將基類的公有成員和保護成員變成自己的私有成員,而基類的私有成員在派生類裡本身就不能訪問。
#include
#include
using namespace std;
class cbase
int getage()
protected:
void setname(string s)
void setage(int i)
};class cderive : private cbase
string getbasename()
int getbaseage()
};int main ( )
從上面的例子可以看出,對於私有繼承,基類的成員能否訪問,有以下特徵:
基類的私有成員:在派生類和外部都不可以訪問。
基類的公有成員:在派生類可以訪問,在外部不可以訪問。
基類的保護成員:在派生類可以訪問,在外部不可以訪問。
三、保護(protected)繼承
保護繼承是將基類的公有成員和保護成員變成自己的保護成員,而基類的私有成員在派生類裡本身就不能訪問。
#include
#include
using namespace std;
class cbase
int getage()
protected:
void setname(string s)
void setage(int i)
};class cderive : protected cbase
string getbasename()
int getbaseage()
};int main ( )
從上面的例子可以看出,對於私有繼承,基類的成員能否訪問,有以下特徵:
基類的私有成員:在派生類和外部都不可以訪問。
基類的公有成員:在派生類可以訪問,在外部不可以訪問。
基類的保護成員:在派生類可以訪問,在外部不可以訪問。
四、三種繼承方式的比較
從上面的結果來看,私有繼承和保護繼承作用完全一樣。仔細一想其實還是有區別,區別是如果派生類再一次去派生其它類時,對於剛才的私有繼承來說,再派生的類將得不到任何成員。而對於剛才的保護繼承,仍能夠得到基類的公有和保護成員。
a類(基類)
b類(a的派生類)
c類(b的派生類)
公有繼承
公有成員
公有成員
公有成員
私有成員
(無)(無)
保護成員
保護成員
保護成員
私有繼承
公有成員
私有成員
(無)私有成員
(無)(無)
保護成員
私有成員
(無)保護繼承
公有成員
保護成員
保護成員
私有成員
(無)(無)
保護成員
保護成員
保護成員
C 繼承 公有,私有,保護
公有繼承 public 私有繼承 private 保護繼承 protected 是常用的三種繼承方式。1.公有繼承 public 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。2.私有繼承 private...
C 繼承 公有,私有,保護
公有繼承 public 私有繼承 private 保護繼承 protected 是常用的三種繼承方式。1.公有繼承 public 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。2.私有繼承 private...
C 繼承 公有,私有,保護
公有繼承 public 私有繼承 private 保護繼承 protected 是常用的三種繼承方式。1.公有繼承 public 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。2.私有繼承 private...