C++ 深入理解 Public, Private, Protect

Public, Private, Protect

一文看懂C++ public, private, protect => 参考

语义

  • Private表达的语义是**“只有我知道这些秘密”**。
  • Protect表达的语义是**“为父有一部分秘密愿意与我的孩子共享,但是我的孩子也要一起保护这个秘密。为父愿意与你共享,但你要把这个秘密当成Private”**
  • Public表达的语义是**“这是完全公开的”**。

从上面可以看出:

  • Private的权限管理是极严苛的,仅允许自己类的成员函数内访问,子类中的成员函数都不能访问。
  • Public的权限管理是极宽容的,信任所有人。
  • Protect介于两者之间,相当于开了白名单,仅信任子类内部,不信任其他。相当于父类的Protect成员被子类当成Private处理。

Protect引入的矛盾

  • 矛盾一:父类Protect成员 + 子类对父类Private继承。其矛盾在于,Protect就是为了让父亲和孩子一起守护秘密,但是Private是只允许我自己知道秘密。可以猜测其使用场景是,龙生九子各有不同,对一部分孩子,父亲愿意共享秘密,对另一部分孩子,父亲仍保持戒备。
  • 矛盾二:父类Public成员 + 子类对父类Protect继承。其矛盾在于,父类Public就表明父类对外完全公开了,但是Protect表达了父类要子类保护自己的Public。其效果是父类对象可以随意访问其Public成员,子类对象不可以随意访问父类的Public成员。意义何在呢?

Friend友元类和友元函数

  • 语义:“虽然你不是我的孩子(非继承关系),但我信任你(允许访问private),你不能告诉别人(友元关系不能传递)”
  • 和 Protect 相比,友元类提供了 非子类 能访问 private的可能。

从 Struct 到 Class

  • Struct中虽然也可以使用private关键字,但是如果没有明确用private标识,成员变量默认是public权限。
  • Class中,如果没有明确使用public标识,成员变量默认是private权限。
  • 从Struct到Class,可以看出C++的权限管理更加严谨。

启发

对外暴露的越少,内部修改越自由。因为不用担心企图修改的对象已经被外部用到了。

所以要写尽量多的黑盒。

Static

Const

const其实也实现了权限管理 连自己

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值