C 公有繼承 私有繼承和保護繼承

2021-07-03 17:04:40 字數 1976 閱讀 2289

在c++中有三種繼承方式:公有繼承(public)、私有繼承(private)和保護繼承(protected)。

1. 公有繼承(public)

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

2. 私有繼承(private)

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

3. 保護繼承(protected)

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

下表列出三種不同繼承方式的基類特性和派生類特性。

public          

protected    

private         

公有繼承

public

protected

不可見私有繼承

private

private

不可見保護繼承

protected

protected

不可見從表中可以作如下總結:

1) 基類成員對派生類而言:公有和保護成員是可見的,私有成員是不可見的。

2) 基類成員對派生類物件而言:要看基類的成員在派生類中變成了什麼型別的成員。如:私有繼承時,基類的公有成員和保護成員都變成了派生類中的私有成員,因此對於派生類的物件來說,基類的共有成員和保護成員是不可見的。

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

公有繼承

(1) 基類成員對其物件的可見性:

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

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

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

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

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

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

私有繼承

(1) 基類成員對其物件的可見性:

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

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

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

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

所有成員都不可見。

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

保護繼承

這種繼承方式與私有繼承方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性。

using namespace std;

//class base //父類;//

class derive1 : public base //基類base的派生類derive1 (公有繼承)

};//

class derive2 : private base //基類base的派生類derive2(私有繼承)

};//

class derive3 : protected base //基類base的派生類derive3(保護繼承)

};//

int main()

C 公有繼承,私有繼承和保護繼承

三種訪問許可權 public 可以被任意實體訪問 protected 只允許子類及本類的成員函式訪問 private 只允許本類的成員函式訪問 友元函式可以訪問這三種訪問許可權的成員 三種繼承方式 public 繼承 protect 繼承 private 繼承 組合結果 基類中 繼承方式 子類中 p...

c 公有繼承 保護繼承和私有繼承

c 中的繼承方式有 public private protected三種 它們直接影響到派生類的成員 及其物件對基類成員訪問的規則 1 public 公有繼承 繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public protected成員,而不能...

C 公有繼承 保護繼承和私有繼承

c 中的繼承方式有 public private protected三種 它們直接影響到派生類的成員 及其物件對基類成員訪問的規則 1 public 公有繼承 繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public protected成員,而不能...