C++ Primer 第十五章知识点 15.5—访问控制与继承

一、每个类分别控制着其成员对于派生类来说是否可访问:

1、受保护成员

  • 受保护成员对于类的用户来说是不可访问的;
  • 受保护成员对于派生类的成员和友元来说是可访问的;
  • 派生类的成员和友元只能通过派生类对象来访问基类的受保护成员。派生类对于一个基类对象中的受保护成员没有任何访问权限。
    示例代码:
class Base
{
protected: 
    int prot_mem;
};
class Sneaky: public Base
{
    friend void clobber(Sneaky&);
    friend void clobber(Base&);
    int j;
};
//正确:clobber能访问Sneaky对象的private和protected成员
void clobber(Sneaky &s) { s.j=s.prot_mem = 0; }
//错误:clobber不能访问Base对象的protected成员
void clobber(Base &b) { b.prot_mem = 0; }

即可以这样描述:派生类的友元和成员实际上能访问的是派生类对象中相关的基类部分的受保护成员,而不能访问一个基类对象的受保护成员及私有成员。这样规定的目的是为了防止基类中protected提供的访问保护被规避掉。

二、公有、私有和受保护继承:

1、影响某个类对继承而来的成员的访问权限的两个影响因素:

  • 基类中该成员的访问说明符——控制派生类对其直接基类部分成员的访问权限。
  • 派生类的派生列表中的访问说明符——对于派生类的成员(及友元)能否访问其直接基类的成员没什么影响。此说明符的目的是控制派生类用户(普通用户和该派生类的派生类)对于基类成员的访问权限。

三、类的用户:

1、不考虑继承的情况

  • 普通用户(其所编写的代码使用类的对象)——只能访问类的公有(接口)成员
  • 类的实现者(负责编写类的成员和友元的代码)——既能访问类的公有部分,也能访问类的私有(实现)部分

2、考虑继承的情况

  • 包含不考虑继承的情况提到的两种用户
  • 派生类——可访问基类的公有(接口)成员、受保护成员(派生类及其友元不能访问基类的私有成员)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值