日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承

發布時間:2024/8/23 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html


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) 基類成員對派生類對象的可見性:

所有成員都是不可見的。

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

對于保護繼承方式

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

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

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

看看這樣的例子

#include<iostream> using?namespace?std; // class?A??????//父類 { private: ????int?privatedateA; protected: ????int?protecteddateA; public: ????int?publicdateA; }; // class?B :public?A?????//基類A的派生類B(共有繼承) { public: ????void?funct() ????{ ????????int?b; ????????b=privatedateA;??//error:基類中私有成員在派生類中是不可見的 ????????b=protecteddateA;//ok:基類的保護成員在派生類中為保護成員 ????????b=publicdateA;???//ok:基類的公共成員在派生類中為公共成員 ????} }; // class?C :private?A?//基類A的派生類C(私有繼承) { public: ????void?funct() ????{ ????????int?c; ????????c=privatedateA;???//error:基類中私有成員在派生類中是不可見的 ????????c=protecteddateA;?//ok:基類的保護成員在派生類中為私有成員 ????????c=publicdateA;????//ok:基類的公共成員在派生類中為私有成員 ????} }; // class?D :protected?A??//基類A的派生類D(保護繼承) { public: ????void?funct() ????{ ????????int?d; ????????d=privatedateA;??//error:基類中私有成員在派生類中是不可見的 ????????d=protecteddateA;//ok:基類的保護成員在派生類中為保護成員 ????????d=publicdateA;???//ok:基類的公共成員在派生類中為保護成員 ????} }; // int?main() { ????int?a; ????B objB; ????a=objB.privatedateA;??//error:基類中私有成員在派生類中是不可見的,對對象不可見 ????a=objB.protecteddateA;//error:基類的保護成員在派生類中為保護成員,對對象不可見 ????a=objB.publicdateA;???//ok:基類的公共成員在派生類中為公共成員,對對象可見 ????C objC; ????a=objC.privatedateA;??//error:基類中私有成員在派生類中是不可見的,對對象不可見 ????a=objC.protecteddateA;//error:基類的保護成員在派生類中為私有成員,對對象不可見 ????a=objC.publicdateA;???//error:基類的公共成員在派生類中為私有成員,對對象不可見 ????D objD; ????a=objD.privatedateA;??//error:基類中私有成員在派生類中是不可見的,對對象不可見 ????a=objD.protecteddateA;//error:基類的保護成員在派生類中為保護成員,對對象不可見 ????a=objD.publicdateA;???//error:基類的公共成員在派生類中為保護成員,對對象不可見 ????return?0; }

總結

以上是生活随笔為你收集整理的C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。