C++中访问控制与继承

C++中访问控制与继承

概述

c++类的访问说明符有public、private和protected
- public 基类(成员函数和对象)和其派生类还有友元可以访问。
- private 只有基类本身和友元可以访问。
- protected 被派生类对象访问但不能被该类型的普通用户访问

上面是大概描述,对于一个类对象及其成员函数来说的访问权限。
而对于继承机制来说,其成员的访问权限影响因素由:
1.基类中该成员的访问说明符 :决定派生类的成员是否可以访问基类
2. 派生类列表中的访问说明符 : 控制派生类用户(包括派生类的派生类)对于基类成员的访问权限

下面对于派生类中的3种继承方式来详细点的说明:
(这里需要指出的是,可见性包括成员函数的可见性和对象的可见性,其格式为 成员或对象 对xx类的可见性对xx类来说)

-公有继承(public)

public继承,那么原先基类的public、private和protected的访问控制对此基类的派生类的子类不变。

也即基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员可见,基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态;基类的私有成员不可见,基类的私有成员仍然是私有的,派生类不可访问基类中的私有成员。

有人比喻为:公有继承就像是三口之家的小孩,享受父母所给的温暖,享有父母的一切(public和protected的成员)。其中保护的成员不能被外界所享有,但可以为小孩所拥有。只是父母还有其一点点隐私(private成员)不能为小孩所知道。

-私有继承(private)

基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员是可见的,基类的
公有成员和保护成员都作为派生类的私有成员(降级),并且不能被这个派生类的子类所访问;基类的私有成员依然是不可见的,派生类不可访问基类中的私有成员。
而基类成员对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的。
所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。

私有继承就像是离家出走的小孩,一个人在外面漂泊。不能拥有父母的一切(public和protected的成员)。而其流淌着父母的血液,所以其还是可以访问public和protected的成员(但降为派生类的private,即基类成员对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的)。
所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。

-保护继承(protected)

这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言。实际使用这个继承很少,一般只是在技术上讨论时有其一席之地。

另外,改变个别成员的可访问性使用 命名空间using来实现;具体可以看 《C++ primer》(中文第五版) p546.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值