博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 沉思录——Chap4:设计类的核查表
阅读量:7123 次
发布时间:2019-06-28

本文共 1622 字,大约阅读时间需要 5 分钟。

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

     构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象赋初始值,总与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引用吗?
 
 

转载地址:http://zjael.baihongyu.com/

你可能感兴趣的文章
【跃迁之路】【613天】程序员高效学习方法论探索系列(实验阶段370-2018.10.17)...
查看>>
Python:Tornado 第三章:HTML5 WebSocket概念及应用:第三节:客户端编程
查看>>
你用过不写代码就能完成一个简单模块的组件么?
查看>>
LeetCode 622——设计循环队列
查看>>
轻量级富文本编辑器wangEditor结合vue使用方法
查看>>
高程3总结#第10章DOM
查看>>
记一次Win10安装MySQL Server 5.7.20失败
查看>>
javascript对象原型成员详解
查看>>
vue进阶1-1 - 项目搭建(vue-cli)
查看>>
R语言与Tableau集成之可视化应用
查看>>
原来PHP对象比数组用更少的内存
查看>>
虎牙数万主播同时在线直播的秘密,CDN推流日志上行实时监控
查看>>
Git常用指令
查看>>
Notes about Vue Style Guide
查看>>
使用Kotlin + SpringBoot + JPA 进行web开发极简教程
查看>>
运用Re-Encryption技术对你的IPFS网络数据进行多重保护
查看>>
Codepen 每日精选(2018-4-26)
查看>>
制作U盘启动盘重装macOS High Sierra
查看>>
微信小程序全局状态管理,并提供Vuex的开发体验
查看>>
Node.js+Mysql+Vue+ElementUI 实现登录注册注销功能
查看>>