前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解 C++权限管理

深入理解 C++权限管理

原创
作者头像
村子里的设计师
修改2023-03-28 21:35:26
4280
修改2023-03-28 21:35:26
举报
文章被收录于专栏:程序设计a程序设计a

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其实也实现了权限管理 连自己

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Public, Private, Protect
    • 语义
      • Protect引入的矛盾
        • Friend友元类和友元函数
          • 从 Struct 到 Class
            • 启发
            • Static
            • Const
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档