专栏首页C++核心准则原文翻译C++核心准则C.8:存在非公有成员时,使用class而不是struct定义类

C++核心准则C.8:存在非公有成员时,使用class而不是struct定义类

C.8: Use class rather than struct if any member is non-public

C.8:存在非公有成员时,使用class而不是struct定义类

Reason(原因)

Readability. To make it clear that something is being hidden/abstracted. This is a useful convention.

可读性。明确有些东西是被隐藏或抽象的。这是一个有用的惯例。

Example, bad(反面示例)

struct Date {
    int d, m;

    Date(int i, Month m);
    // ... lots of functions ...
private:
    int y;  // year
};

There is nothing wrong with this code as far as the C++ language rules are concerned, but nearly everything is wrong from a design perspective. The private data is hidden far from the public data. The data is split in different parts of the class declaration. Different parts of the data have different access. All of this decreases readability and complicates maintenance.

如果只是考虑C++语言的规则,这段代码没有任何错误。但是如果从设计的观点来看的话,差不多所有东西都错了。私有数据被也隐藏在距离共有数据很远的位置。数据被分散到类声明的不同部分。不同部分的数据的访问属性也不同。所有的这些都会降低可读性并增加维护的复杂性。

Note(注意)

Prefer to place the interface first in a class, see NL.16.

类的开始部分最好放置接口(这里值共有成员函数,译者注),参见NL.16.

链接:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rl-order

Enforcement(实施建议)

Flag classes declared with struct if there is a private or protected member.

如果使用struct关键字声明的类具有私有或保护成员,进行提示。

原文链接:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c8-use-class-rather-than-struct-if-any-member-is-non-public

觉得本文有帮助?请分享给更多人。

关注【面向对象思考】轻松学习每一天!

有任何疑问,欢迎留言提问或讨论。


面向对象开发,面向对象思考!

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则E.26:如果无法抛出异常,尽快进行失败处理​

    E.26: If you can't throw exceptions, consider failing fast

    面向对象思考
  • C++核心准则T.47:避免使用通用名称的高度不受限模板

    An unconstrained template argument is a perfect match for anything so such a tem...

    面向对象思考
  • C++核心准则T.13:对于简单的,单类型参数概念,使用缩略记法更好

    Readability. Direct expression of an idea.

    面向对象思考
  • Filebeat快速入门

    可能需要额外授予执行权限。命令为:PowerShell.exe -ExecutionPolicy RemoteSigned -File .\install-s...

    趣学程序-shaofeer
  • Python为什么文件运行和在命令行运行同样语句但结果却不同?

    这篇是之前知乎上的一个提问,感觉非常有趣而且内容丰富,所以把我自己的回答搬运到公众号来。 另外关于昨天的推送,是因为我之前把文章投到了Python中文社区的公众...

    不二小段
  • FreeRTOS-Qemu 实现三任务同步通信机制以及API信息

    ---- 1. 本次作业的考察要点: 作业地址:https://github.com/HustWolfzzb/STM32F429DiscoveryFreeRTO...

    用户1687088
  • Caffe源码解析(一) —— caffe.proto

    caffe.proto是caffe数据结构定义的主要文件,本文主要是在caffe.proto代码的基础上加上了部分中文注释,其中的内容与caffe的protot...

    Tyan
  • 应对Chrome中的Samesite,在Google Analytics中设置cookieFlags

    cookieFlags是Google Analytics新增增加的的一个设置,这个设置只存在于统一版跟踪代码、全局版跟踪代码和APP+Web,其中统一版对应的是...

    GA小站
  • PHP操作Cookie的写入与读取

    cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您...

    周俊辉
  • linux 查找目录下的执行可脚本

    葫芦

扫码关注云+社区

领取腾讯云代金券