C 繼承 公有,私有,保護

2021-08-20 13:35:57 字數 2770 閱讀 3588

公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。

在看這篇文章的時候,建議先將程式例子看一下,回頭看一下說明,這樣方便理解。

說明:參考部落格:

1. 公有繼承(public)

公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。

2. 私有繼承(private)

私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。

3. 保護繼承(protected)

保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函式或友元訪問,基類的私有成員仍然是私有的。

下面列出三種不同的繼承方式的基類特性和派生類特性:基類不同特性(public ,protected,private)的成員在公有,私有,保護繼承下,派生類中,對這些成員的訪問特性。

比如說:

在公有繼承下,基類中public的成員,在派生類中的訪問特性變成是public;

基類中protected的成員,在派生類中的訪問特性變成是protected;

基類中private的成員,在派生類中的訪問特性變成是不可見。

public

protected

private

公有繼承

public

protected

不可見私有繼承

private

private

不可見保護繼承

protected

protected

不可見為了進一步理解三種不同的繼承方式在其成員的可見性方面的區別,下面從三種不同角度進行討論。

對於公有繼承方式

(1) 基類成員對派生類的可見性:

公有成員和保護成員可見,而私有成員不可見。這裡保護成員同於公有成員。

(2) 基類成員對派生類物件的可見性:

公有成員可見,其他成員不可見。

所以,在公有繼承時,派生類的物件可以訪問基類中的公有成員;派生類的成員函式可以訪問基類中的公有成員和保護成員。這裡,一定要區分清楚派生類的物件和派生類中的成員函式對基類的訪問是不同的。

對於私有繼承方式

(1) 基類成員對派生類的可見性:

公有成員和保護成員是可見的,而私有成員是不可見的。

(2) 基類成員對派生類物件的可見性:

所有成員都是不可見的。

所以,在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。

對於保護繼承方式

這種繼承方式與私有繼承方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性(私有繼承後派生類中的成員的被訪問特性變成是private,而保護繼承變成是protected)。

(1) 基類成員對派生類的可見性:

公有成員和保護成員是可見的,而私有成員是不可見的。

(2) 基類成員對派生類物件的可見性:

所有成員都是不可見的。

上述所說的可見性也就是可訪問性。

關於可訪問性還有另的一種說法。這種規則中,稱派生類的物件對基類訪問為水平訪問,稱派生類的派生類對基類的訪問為垂直訪問。

看看這樣的例子:

[cpp] 

view plain

copy

#include

using

namespace

std;  

//class

a       

//父類

;  //

class

b :public

a      

//基類a的派生類b(共有繼承)

};  

//class

c :private

a  //基類a的派生類c(私有繼承)

};  

//class

d :protected

a   

//基類a的派生類d(保護繼承)

};  

//int

main()  

最後結合這個例子,做一點通俗些的總結。

關於公有,私有,保護繼承,那麼其所涉及到的主要有兩點:

(1)基類中的成員的被訪問特性經過繼承之後,在派生類中的被訪問特性的變化。

比如說,在基類有乙個成員變數a,他是public的,那麼經過公有,私有,保護繼承之後,他的被訪問特性變成:public,private,protected。

那麼通過這個表我們就可以清楚的知道其具體的變化了。

public

protected

private

公有繼承

public

protected

不可見私有繼承

private

private

不可見保護繼承

protected

protected

不可見(2)經過繼承之後,派生類所產生的物件對基類中的這些成員的訪問訪問許可權。

那麼我們也可以通過這個表來體現:

public

protected

private

公有繼承

可見不可見

不可見私有繼承

不可見不可見

不可見保護繼承

不可見不可見

不可見

其實經過第一點的介紹也是很容易理解的,比如說乙個基類的public成員,經過private繼承之後,在派生類中的被訪問特性已經變成了private,那麼其所產生的物件當然對這個成員就是不可見的啦!

C 私有 保護 公有繼承

一 公有 pulic 繼承 繼承 是類的重要特性。a類繼承b類,我們稱b類為 基類 也稱為 父類 a類則相應地被稱為 派生類 或 子類 a類繼承了b類之後,a類就具有了b類的部分成員。那麼,究竟從基類那兒得到了哪些成員,這由2方面決定,繼承方式,基類成員的訪問許可權 即public private ...

C 繼承 公有,私有,保護

公有繼承 public 私有繼承 private 保護繼承 protected 是常用的三種繼承方式。1.公有繼承 public 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。2.私有繼承 private...

C 繼承 公有,私有,保護

公有繼承 public 私有繼承 private 保護繼承 protected 是常用的三種繼承方式。1.公有繼承 public 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。2.私有繼承 private...