类是C++ 语言的核心概念,要想写出高质量的C++代码,最重要的事情就是把类设计好,下面介绍一些C++类设计的基本规则。

1 命名

类名一般是名词,用大白话说就是类一般都是个“东西”,根据我的命名原则,业务逻辑中涉及到的所有“东西”在程序中都应该有一个对应的类。

类的方法一般是动词,或者动宾式组合,类方法的隐含的主语就是类自己。

举个例子来说,类名是:CHUMAN (人),则根据业务逻辑,CHUMAN的方法可以有打、踢、吃、笑等动作。

这里再次强调一下命名原则的一个推论:如果程序中类的某些数据和它的名字在逻辑上是无关的,则代表类的命名有问题;如果无法重命名,或者找不到合适的名字,则意味着类需要重新设计。

2 类的分类

类可分为数据类和业务类两大类,所谓的数据类,有点类似结构体,单纯是为了保存数据,在多线程情况下,可以用来线程间数据通讯;业务类就是功能模块,业务类分单线程模式和多线程模式,它们的接口几乎一样,区别在于核心业务处理方法是否阻塞。

3 类的四段式

所有的类都可以抽象成四部分:OPEN、CLOSE、CONFIG 和 RUN。OPEN 和 CLOSE 一般就是初始化和释放,CONFIG 就是对行为方式进行配置,而 RUN 就是执行业务逻辑。

OPEN里面一般是分配内存、创建句柄等工作,对应的 CLOSE 是释放内存和销毁句柄。CONFIG 和 RUN 中仅适用内存,不涉及任何申请和释放内存等操作。

对于多线程业务类,会用 START/STOP替代 OPEN/CLOSE,在 START 中创建线程,在STOP 终止线程。

4 数据保护

类中所有数据都应该用PRIVATE 或 PROTECTED 修饰,而严禁用 PUBLIC 修饰,这就是所谓数据保护原则。

5 定义顺序

建议先定义方法,后定义数据,由于方法是 PUBLIC 的,所以类的定义顺序建议是 PUBLIC 方法,后PRIVATE 数据。举个例子:

Class C

{

Public:

Func1();

Func2();

Private:

Inta;

Intb;

};

6 多态注意事项

A基类的析构函数要定义为虚函数

B基类的数据最好用 PROTECTED 修饰

C++ 类的设计规则相关推荐

  1. 一文讲透非标品的商品类目设计

    www.pmcaff.com 本文为作者 百转 于社区发布 只要做电商,商品类目设计就是绕不开的一环.好的类目设计能让供需双方更快.更好定义或找到所关心的商品,是整个电商体系的地基,是构建并链接各个模 ...

  2. c++矩阵类_数据结构-JavaScript矩阵类的设计与实现

    矩阵是线性代数课学习的重点内容之一,也是线性代数常见工具之一,在应用数学.统计分析.计算机科学.计算机图像处理级物理等多学科中均有应用.矩阵主要是指数据的行列排列的形式,由行row与列col所组成,在 ...

  3. Java 设计模式 Day1 之面向抽象原则:抽象(abstract)类的设计与应用分析

    文章目录 前言 一.抽象(abstract)类的设计要点 二.抽象类的应用实例 2.1.创建一个抽象类 2.2.创建抽象类非抽象子类 2.3.通过上转型对象调用子类方法 总结 前言 面向抽象原则是面向 ...

  4. android 类的设计,Android App的类响应式设计

    导言 根据google的官方显示Android 4.0以上的设备已经有34.2%,由于国内很多的手机都没机会用上google play市场,所以国内市场的情况,得看类似于友盟的季度报告才知道了.个人觉 ...

  5. python如何设计工具类_Python面向对象 --- 类的设计和常见的内置方法

    面向对象:一种基于面向过程的新的编程思想.也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种 ...

  6. 20条不该打破的设计规则

    在设计中,我们常被允许.鼓励打破设计规则,这时你至少需要知道这些规则,才能正确的打破它们. 本文列出了一些基本的规则和技巧,从字体.排版到色彩.样式,涵盖了大部分设计中常见的错误,帮助你在设计中避免它 ...

  7. 【C++】特殊类相关设计

    前言 在实际的应用场景中,不免会有一些特殊的设计要求存在.在C++中,由于三种不同的域,以及地址空间的大小或者申请方式不同,就衍生出了一些特殊的设计类方法. 何为特殊呢?即区别于普通类的设计. 上一篇 ...

  8. bga焊盘怎么做_焊接焊盘和BGA设计规则

    焊接焊盘和BGA设计规则 阅读量 11235 发布时间 2019-10-26 随着电子产业的进步,PCB封装中BGA的应用越来越广范,但随之出现了一些问题点,我们先看看下面图示: 1)制作前原始设计B ...

  9. CAD电气工程图教程之布局方法和设计规则

    我们在进行CAD电气工程图绘制的时候,一定要知道CAD电气工程图的设计规则和布局方法,今天小编就来给大家详细的介绍一下. CAD电气工程图的一般规则 1.电气图面的构成:边框线.图框线.标题栏.会签栏 ...

最新文章

  1. 使用什么优化器_在机器学习项目中该如何选择优化器?
  2. Appium环境搭建-完整版
  3. ActivityManager kill reason
  4. 腾讯再诉今日头条系 要求删除用户游戏视频
  5. 课程作业02实验报告
  6. python编程技术总结_大数据技术学习之Spark技术总结
  7. LSH︱python实现局部敏感哈希——LSHash(二)
  8. 显示桌面 图标 创建可以新建一个txt文件,把以下内容放入,名字改为显示桌面 .scf...
  9. 做一个和瑞幸咖啡一样的小程序,就能3月赚24亿了吗?
  10. 计算机说课稿模板小学数学,小学数学说课万能模板精简
  11. Matlab TreeBagger随机森林回归实例
  12. 用图818“女版乔布斯”霍姆斯定罪前后的轨迹
  13. bzoj5369 [Pkusc2018]最大前缀和(状压dp)
  14. 【论文精读】Grounded Language-Image Pre-training(GLIP)
  15. 计算24点游戏C语言课设
  16. 线上英语教学APP开源平台(定制制作)
  17. 酷睿i7 12700k和i7 12700kf的区别 i712700k和i712700kf差多少
  18. 魔兽世界服务器维护后 猎人宝宝,9.0猎人全宠物刷新地点 猎人宝宝刷新点大全...
  19. MYSQL/ORACLE/SQL SERVER的默认端口号
  20. python数据集处理

热门文章

  1. 被遗忘的黑莓,你还活得好么?
  2. 【Aegisub相关】_G 简化代码写法的有效范围
  3. 封闭式基金周折价率排行表20061013(ZT)
  4. 每日经典算法题(十三) 逆推算法(平方根相关)
  5. 2022.05.07基金策略研究
  6. 查看windows系统进程的详细信息,任务管理器看不到的
  7. iOS 7 跳过的一个坑又掉里了 - 图片渲染模式
  8. UE的rtsp插件崩溃过程排查
  9. 企业不懂如何选择低代码平台?看看这20家优秀的厂商
  10. php 上午 和下午,“上午”和“下午”的表示法