公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。
1. 公有繼承(public):
2. 私有繼承(private):
私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。
3. 保護繼承(protected):
保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函式或友元訪問,基類的私有成員仍然是私有的。
三種繼承方式的對比:
特徵公有繼承
私有繼承
保護繼承
公有成員繼承
派生類公有成員
派生類私有成員
派生類保護成員
私有成員繼承
只能通過基類介面訪問
只能通過基類介面訪問
只能通過基類介面訪問
保護成員繼承
派生類保護成員
派生類私有成員
派生類保護乘員
能否隱式轉換是否
是(但只能在派生類中)
在上圖中:
1)基類成員對派生類都是:共有和保護的成員是可見的,私有的的成員是不可見的。
2)基類成員對派生類的物件來說:要看基類的成員在派生類中變成了什麼型別的成員。如:私有繼承時,基類的共有成員和私有成員都變成了派生類中的私有成員,因此對於派生類中的物件來說基類的共有成員和私有成員就是不可見的。
為了進一步理解三種不同的繼承方式在其成員的可見性方面的區別,下面從三種不同角度進行討論。
公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。
對於公有繼承方式
(1) 基類成員對其物件的可見性:
公有成員可見,其他不可見。這裡保護成員同於私有成員。
(2) 基類成員對派生類的可見性:
公有成員和保護成員可見,而私有成員不可見。這裡保護成員同於公有成員。
(3) 基類成員對派生類物件的可見性:
公有成員可見,其他成員不可見。
所以,在公有繼承時,派生類的物件可以訪問基類中的公有成員;派生類的成員函式可以訪問基類中的公有成員和保護成員。這裡,一定要區分清楚派生類的物件和派生類中的成員函式對基類的訪問是不同的。
對於私有繼承方式
(1) 基類成員對其物件的可見性:
公有成員可見,其他成員不可見。
(2) 基類成員對派生類的可見性:
公有成員和保護成員是可見的,而私有成員是不可見的。
(3) 基類成員對派生類物件的可見性:
所有成員都是不可見的。
所以,在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。
對於保護繼承方式
這種繼承方式與私有繼承方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性。
上述所說的可見性也就是可訪問性。
關於可訪問性還有另的一種說法。這種規則中,稱派生類的物件對基類訪問為水平訪問,稱派生類的派生類對基類的訪問為垂直訪問。
看看這樣的例子:
#includeusing namespace std;
//class a //父類;//
class b :public a //基類a的派生類b(共有繼承)
};//
class c :private a //基類a的派生類c(私有繼承)
};//
class d :protected a //基類a的派生類d(保護繼承)
};//
int main()
C 三種繼承方式
繼承是使 可以復用的重要手段,也是物件導向程式設計的核心思想之一。簡單的說,繼承是指乙個物件直接使用另一物件的屬性和方法。繼承呈現了 物件導向程式設 計的層次結構,體現了 由簡單到複雜的認知過程。c 中的繼承關係就好比現實生活中的父子關係,繼承一筆財產比白手起家要容易得多,原始類稱為基類,繼承類稱為...
C 三種繼承方式
一 公有繼承 public 基類成員對派生類的可見性為 基類的公有成員和保護成員可見,基類的私有成員不可見。基類成員對派生類物件的可見性為 基類的公有成員可見,保護成員和私有成員不可見,即通過派生類的物件只能訪問基類的public成員。所以,在公有繼承時,派生類的物件可以直接訪問基類中的公有成員,派...
C 三種繼承方式
一 三種繼承方式 繼承方式不同,第乙個不同是的是派生類繼承基類後,各成員屬性發生變化。第二個不同是派生類的物件能訪問基類中哪些成員發生變化。中紅色標註。1 include 2 using namespace std 34 classa5 1314class b publica15 1819int m...