C++public/private/protected访问控制权限本质

本文来源于:https://www.cnblogs.com/chio/archive/2007/06/11/779408.html感谢原作者!

成员函数是属于类的,而成员变量是属于对象的。

类是将数据成员和进行于其上的一系列操作(成员函数)封装在一起,注意:成员函数可以操作数据成员(可以称类中的数据成员为泛数据成员)!

对象是类的实例化,怎样理解实例化?其实每一个实例对象都只是对其中的数据成员初始化,内存映像中每个对象仅仅保留属于自己的那份数据成员副本。而成员函数对于整个类而言却是共享的,即一个类只保留一份成员函数。

C++中public,protected,private访问小结
第一:private,public,protected方法的访问范围.(public继承下)
private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. 
protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 
public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数

顾名思义,private/public/protected 分别表示 私有/公开/保护,它们是一组用于访问权限控制的关键字。那么首先,需要澄清的一个关键点是,是要控制谁访问谁的权限?这个访问的主语(施事)是谁?宾语(受事)是谁?

我们经常听到这样的说法:

1)一个类友元可以访问该类的任何成员(包括成员变量及成员方法,下同)。
2)private成员只有该类自身可以访问,protected成员只有该类及其派生类可以访问,public成员所有的人都可以访问。

宾语(受事)是谁这一点很明确,是类的成员(包括成员变量及成员方法)。主语(施事)是谁?这是让大家发生混淆的关键点。也是这个说法中含糊不清的地方。

想清楚一点,其实主语(施事)指的是一个函数,而不是(当然更不是变量)。

private/public/protected要控制的是一个函数(施事)对一个类的成员(包括成员变量及成员方法)的访问权限。因此比较完整的说法是:

1)一个类友元(包含友元函数或者友元类的所有成员函数)可以访问该类的任何成员(包括成员变量及成员方法)。

2)除去友元外,private成员只有该类自身的成员函数可以访问,protected成员只有该类的成员函数及其派生类的成员函数可以访问,public成员则所有的函数都可以访问。

也就是说,当我们说一个类可以访问XXX,其实暗指这个类的成员函数可以访问XXX。了解了这一点,外加一条显而易见的规则,上面的问题就不难回答了。这条规则是:

3)派生类在继承时可削弱成员的访问权限(通过protected/private修饰)。例如上面的例子class P : protected O {…}; 那么某个函数通过类P访问O中成员时,该函数对类O中的public成员只有protected权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值