一. 你需要一个构造函数吗?

     构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数的特点:1.构造函数的命名必须和类名完全相同。 2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用。
     有些内太简单,它们的结构就是它们的接口,所以不需要构造函数。但是一般情况下都需要构造函数来初始化成员变量。
二. 你的数据成员是私有的吗?
     一般都需要将类的数据成员设置为私有,否则设计者将无法控制何时访问这些成员。
三. 你的类需要一个没有参数的构造函数吗?
     如果一个类已经有了构造函数,而你想声明该类的对象可以不必显示的初始化它们,则必须显示地写一个午餐的构造函数,例如:
class Point{
          public :
               Point(int p, int q) : x(p),y(q) {}
               ...
          private:
               int x, y;
}
此时,如果使用下面的语句则为非法:
     Point     p; //因为这里没有指出怎么样初始化对象p
 
如果需要生成某个类对象的数组的时候,也需要一个无参的构造函数。
 
四. 是不是每个构造函数初始化所有的数据成员?
 
 
五. 类需要析构函数吗?
     如果类分配了资源,而这些资源又不会由成员函数自动释放,则需要析构函数
 
六. 类需要一个虚析构函数吗?
     绝不会用作基类的类是不需要虚析构函数的。如果一个类需要被继承一般都需要有一个虚析构函数。虚析构函数通常是空的。
 
七. 你的类需要复制构造函数吗?
     关键要看复制该类的对象是否就相当于复制器数据成员和基类对象。如果不是则需要复制构造函数。
     如果你的类在构造函数中分配了资源,则需要一个显示的复制构造函数来管理资源。
     如:(此时就需要复制构造函数)
     class String {
          public:
               String();
               String(const char *s);
               ...
          private:
               char *data;  //data 指向了其他的内存,这时候就需要复制构造函数了
}
     一般情况下,当类中包含有指针类型的 数据成员,则需要三大函数(复制构造函数,复制操作符,析构函数)。
 
八. 你的类需要一个赋值操作符吗?
     如果需要一个复制构造函数,就一般也需要一个赋值操作符。
 
九. 你的赋值操作符能正确地将对象赋值给对象本身吗?
     
     比如有这样一个类:
     class String{
          public:
               String & operator = (const String &s);
          private:
               char *data;
     };
 
下面是一个不正确例子:(一旦向自身赋值则会失败)
     String & String::operator=(const String &s)
     {
          delete [] data;
          data = new char [strlen(s.data) + 1];
          strcpy(data, s.data);
          return *this;
     }
 
一下是正确的实现方式:
     String & String :: operator=(const String &s)
     {
          if( &s != this)
          {
               delete [] data;
               data = new char[strlen(s.data) + 1];
               strcpy(data, s.data);
          }
          return *this;
     }
 
十. 你的类需要定义关系操作符吗?
 
十一. 删除数组时你记得用delete[] 吗?
 
十二. 记得在复制构造函数和复制操作符的参数类型中加上const吗?
 
十三. 如果函数有引用参数,他们应该是const引用吗?
 
 

C++ 沉思录——Chap4:设计类的核查表相关推荐

  1. JAVA编程调优全集-性能设计沉思录(12)

    各文章各专题涉及到还原实践中的场景,原理,方法,模型,代码,原则,设计等:精心打造系列分享,阅读者仔细了解,必定有所收获,也可以收藏,日后工作中参考. 线程与JVM调优专题:设计模式调优-性能设计沉思 ...

  2. C++沉思录-句柄类1

    看了下<C++沉思录>第六章的内容介绍的是句柄第一部分,采用引用计数器的方式减少内存的拷贝 动手敲了下代码加深点印象,加了点注释 class Point { public:     /// ...

  3. 设计模式调优-性能设计沉思录(10)

    JAVA调优系列文章 JVM调优全面探讨-性能设计沉思录(1)_luozhonghua2000的博客-CSDN博客 JVM GC回收和内存分配优化-性能设计沉思录(2)_luozhonghua2000 ...

  4. 《C++沉思录 第2版》

    内容简介: <C和C++经典著作•C++沉思录:Ruminations on C++>基于作者在知名技术杂志发表的技术文章.世界各地发表的演讲以及斯坦福大学的课程讲义整理.写作而成,融聚了 ...

  5. 《C++沉思录》读书笔记

    <C++沉思录>读书笔记 序幕 动机 第1章 为什么我用C++ 第2章 为什么用C++工作 第3章 生活在现实世界中 类与继承 第4章 类设计者的核查表 第5章 代理类 第6章 句柄:第一 ...

  6. ASP.NET Core 沉思录 - 结构化日志

    在 <ASP.NET Core 沉思录 - Logging 的两种介入方法>中我们介绍了 ASP.NET Core 中日志的基本设计结构.这一次我们来观察日志记录的格式,并进一步考虑如何在 ...

  7. 读书笔记∣概率论沉思录 01

    概率的解释基础分为两种,一是物理世界本身存在的随机性(客观概率),二是是我们由于信息不足而对事件发生可能性的度量(主观概率).基于此,形成了概率论的两大学派:频率论学派(传统数理统计学)和贝叶斯统计学 ...

  8. 《设计模式沉思录》—第2章2.4节访问权限

    本节书摘来自异步社区<设计模式沉思录>一书中的第2章,第2.4节访问权限,作者[美]John Vlissides,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  9. 00. 微服务架构沉思录

    微服务架构沉思录 1. 微服务架构沉思录 1.1 微服务架构中的进程间通信 1.1.1 进程间通信技术 1.1.1.1 基于同步请求响应的通信机制 1.1.1.1.1 REST 的好处 1.1.1.1 ...

最新文章

  1. List集合的三个实现类比较
  2. ARMv8/ARMv9指令集概述
  3. 天大和武大计算机考研,985大学排名出炉,天大和武大并列第10,榜首是哪所?...
  4. 10-线程,进程,协程,IO多路复用
  5. [Oracle11g] 通过伪列查询
  6. jmeter安装包_分布式执行jmeter脚本步骤(非GUI)
  7. Python 最强编辑器PyCharm详细使用指南!
  8. 京东:笔试题(合唱队找剩余的最小值,考场安排搬出的人数尽可能少)
  9. 获取mysql存储过程返回值_MySQL函数,存储过程,用户管理
  10. 通过Himal项目学习掌握asp.net MVC
  11. 微信分身服务器验证失败咋办,微信好友验证发送失败原因分析及解决方法汇总...
  12. Vue.js开发基础 05
  13. 常见的平面设计风格有哪些?
  14. 盘点 2019 Python中文社区十大热门文章
  15. 电子邮箱怎么填写正确格式?企业邮箱开通格式填写技巧
  16. git 清除版本库中的忽略文件
  17. Android 更换开机logo和开机动画
  18. javaweb程序开发入门pdf清华,附答案
  19. 她姓敖 是计算机系的,姓敖的名人
  20. uin-app md5加密(超简单)

热门文章

  1. 圣诞节吃饺子时,怎么给女票解释啥是AI?
  2. 如何将JavaScript转化成Swift?(二)
  3. 非泄露,NSA官方开源反汇编工具GHIDRA
  4. 解读Scorm(0):标准
  5. DCIM有助于数据中心的UPS部署
  6. Go语言并发机制初探
  7. 编译安装postfix+sasl+mysql+dovecot+extmail构建完成的邮件系统(一)
  8. 特殊人物请遵循公司工作的基本准则
  9. 【译】Vue 的小奇技(第七篇):在 vue-multiselect 基础上创建 ImageSelect 组件
  10. 4周第4次课 压缩打包介绍 gzip bzip2 xz压缩工具