- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《派生类访问控制
类是面向对象程序设计方法的核心,利用它可以实现对数据的封装、隐蔽,通过类的继承和派生,能够实现对问题的深入抽象描述。类的成员包括数据成员和函数成员,分别描述问题的属性和行为,是不可分割的两个方面。数据成员的声明方式与一般的变量相同,只要将这个声明放在类的主体中即可。类的数据成员与一般变量的区别在于其访问权限可以由类来控制。函数成员是描述类行为的成员,一般在类中声明原型,在类外定义函数的具体实现。
暂不考虑继承:
????对类成员访问权限的控制,是通过设置成员的访问控制属性实现的。访问控制属性有以下三种:public, private和protected。
????公有类型成员用public关键字声明,任何一个来自类外部的访问都必须通过这种类型的成员来访问(“对象.公有成员”)。公有类型声明了类的外部接口。
????私有类型成员用private声明(若私有类型成员紧接着类名称,可省略关键字),私有类型的成员只允许本类的成员函数来访问,而类外部的任何访问都是非法的。这样完成了私有成员的隐蔽。
????在不考虑继承的情况下,保护类型(protected)的性质和私有类型的性质一致。即保护类型和私有类型的性质相似,其差别在于继承过程中对产生的新类影响的不同。
????若在类的内部访问时,所有成员之间都可以通过成员名直接访问,这就实现了对访问的有效控制。
考虑继承:
??? 派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部函数成员,但是这些成员的访问属性在派生的过程中是可以调整的。从基类继承的成员,其访问属性由继承方式控制。基类的成员可以有public、private和 protected三种访问属性,基类的自身成员可以对基类中任何一个其他成员进行访问,但是通过基类的对象就只能访问基类的共有成员。
类的继承方式有公有继承(public)、私有继承(private)和保护继承(protected)三种,不同的继承方式,导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这里所说的访问来自两个方面:一是派生类中的新增成员对从基类继承来的成员的访问;二是在派生类外部(非类族内的成员),通过派生类的对象对从基类继承来的成员的访问。
继承方式
????公有继承(public):当派生类对基类的继承方式为公有继承,基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。其他外部使用者只能通过派生类的对象访问继承来的公有成员,而无论是派生类的成员还是派生类的对象都无法访问基类的私有成员(基类的私有成员只能由基类本身的成员访问)。
????私有继承(private):当类的继承方式为私有继承时,基类中的公有成员和保护成员被继承后作为派生类的私有成员,派生类的其他成员可以直接访问它们,但是在类外部通过派生类的对象无法访问。无论是派生类的成员还是派生类的对象都无法访问从派生类继承的私有成员。
??? 保护继承(protected):保护继承中,基类的公有和保护成员都以保护成员的身份出现在派生类中,即派生类的其他成员都可以直接访问从基类继承来的公有和保护成员,但在类外部通过派生类的对象无法访问它们。基类的私有成员不可访问。
比较私有继承和保护继承,可以看出实际上在直接派生类中,所有成员的访问属性都是完全相同的。但是,如果派生类作为基类继续派生时,二者的区别就出现了。
原帖如下
1?#include?IOSTREAM?2?using?namespace?std;?3??4?class?A{?5?public:?6?????A(int?i_,int?j_)?7?????{?8?????????i=i_;?9?????????j=j_;10?????}11?????void?disp(A?a)12?????{13?????????couta.iendla.jendl;14?????}15?16?private:17?????int?i;18?protected:19?????int?j;20?};21?22?int?main(int?argc,?char*?argv[])23?{24?????A?a(123,456);25?????A?b(789,543);26?????a.disp(b);27?????b.disp(a);28?29?????return?0;30?}?
初看起来,倒是会产生疑问。为什么会这样,是否有bug?仔细考究起来,我们其实可以这样看待类和对象:类是将数据成员和进行于其上的一系列操作(成员函数)封装在一起,注意:成员函数可以操作数据成员(可以称类中的数据成员为泛数据成员)!对象是类的实例化,怎样理解实
文档评论(0)