类设计者的核查表

1.你的类需要一个构造函数吗

需要构造函数来隐藏类的内部工作方式。

2.你的数据成员是私有的吗

通常使用公有的数据成员不是什么好事,因为类设计者无法控制何时访问这些成员。

3.你的类需要一个无参的构造函数吗

为了可生成对象数组或类的对象不必显示的初始化类的构造函数,必须显示地写一个无参的构造函数。

4.是不是每个构造函数初始化所有的数据成员

每个构造函数都要负责为所有的数据成员设置经过明确定义的值。

5.类需要析构函数吗

看该类是否分配了资源,而这些资源又不会由成员函数自动释放。

6.类需要一个虚析构函数吗

决不会用在基类的类是不需要虚析构函数的。

例如:

struct B

{

String s;

//virtual ~B() {}

};

struct D : B{

Stirng t;

};

int main()

{

B* bp=new D;

delete bp;              //这里有问题,除非B有一个虚析构函数,否则将调用错误的析构函数

}

7.你的类需要复制构造函数吗

你的类在构造函数内分配资源,则可能需要一个显式的复制构造函数来管理资源。

8.你的类需要一个赋值操作符吗

如果需要复制构造函数,同理多半也会需要一个赋值操作符。

9.你的赋值操作符能正确地将对象赋给对象本身吗

注意。

10.你的类需要定义关系操作符吗

如果你的类逻辑上支持逻辑操作,可以定义关系操作符。

11.删除数组时,你记住用delete[]吗

C++系统不想占用现有C系统的malloc函数,因此必须利用原来的这个malloc直接实现new。

12.记得在复制构造函数和赋值操作符的参数类型中加上const了吗

需要

13.如果函数有引用参数,它们应该是const引用吗

只有单函数想改变参数是,它才应该有不用const声明的引用参数。

14.记得适当地声明成员函数为const的了吗

如果确信一个成员函数不用修改它的对象,就可以声明它为const。

转载自:http://blog.csdn.net/cq20110310/article/details/7251198

时间: 2024-11-03 05:41:45

类设计者的核查表的相关文章

《C++沉思录》:类设计者的核查表——有关class的11问

本文的11个问题提取自<C++沉思录>第四章.所有问题的说明均为自己补充. 1 你的类需要一个构造函数吗? --正确的定义构造函数,把握好构造函数的职能范围 有些类太简单,它们的结构就是它们的接口,所以不需要构造函数. class print{ void print1(){cout<<"1"<<endl;} void print2(){cout<<"2"<<endl;} void print3(){cout

《C++沉思录》——类设计核查表、代理类、句柄类

<C++沉思录>集中反映C++的关键思想和编程技术,讲述如何编程,讲述为什么要这么编程,讲述程序设计的原则和方法,讲述如何思考C++编程. 一.类设计核查表 1.你的类需要一个构造函数吗? 2.你的数据成员都是私有的合理吗? 3.你的类需要一个无参的构造函数吗? 是否需要生成类对象的数组! 4.你的每一个构造函数都初始化所有的数据成员了吗? 虽然这种说法未必总是正确,但是要积极思考! 5.你的类需要析构函数吗? 6.你的类需要一个虚析构函数吗? 7.你的类需要一个拷贝构造函数吗? 8.你的类需

数据类与生成数据库表所需组成

Entityframework属于ORM框架,作用为:将数据类与数据库表关联起来. 数据类与生成数据库表所需组成: 普通类(实体类):定义了属性字段+限制 数据上下文类:继承了DbContext,(各实体类的集合).作用:生成数据库和操作数据库. 配置文件中.连接数据库的字符串.注意name必须与数据上下文类的派生类名称相同. 控制器中,数据库上下文类的实例化,然后使用给对象方可生成数据库.

利用java日期类生成数据仓库维度表

利用java日期类生成数据仓库维度表 Date类: 最基础的日期时间类,返回一个相对日期的毫秒数.精确到毫秒,但不支持日期的国际化和分时区显示.Date 类从Java 开发包(JDK)1.0 就开始进化,当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了,这种改进旨在更好的处理日期数据的国际化格式. Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期修改功能和国际化

OrmLite动态创建表,一个实体类创建多张表的的偏招

在做一个Android的项目,因为使用数据库频繁,实体字段也比较多,于是打算采用ORM框架,发现OrmLite还不错,于是下了下来,打算使用. 没想到还没正式开工,就遇到问题了.我现在的一个需求如下, 我有一个实体类如下,代表聊天消息,现在要做的是针对每一个当前用户(userId)对应一个朋友(friendId)都要创建一个表.需求比较蛋疼,我本来想的是直接在加两个字段就搞定的,但是我们老大说要分表.没办法只能分表. public class ChatMessage{ public ChatMe

HBase概念学习(八)开发一个类twitter系统之表设计

这边文章先将可能的需求分析一下,设计出HBase表,下一步再开始编写客户端代码. TwiBase系统 1.背景 为了加深HBase基本概念的学习,参考HBase实战这本书实际动手做了这个例子. 2.需求 这是一个用户推特系统,用户登陆到系统,需要维护用户的基本信息,然后用户可以发帖和其他用户进行互动.用户之间可以相互关注,用户可以浏览关注用户的推文等等. 这是一个比较简单的推特系统,不考虑用户之间的私信,用户评论推特等功能. 3.概要设计 3.1表设计 首先需要设计三个表:用户表,推特表以及用户

22号安锦瑞和38赵陶然小组代码复审核查表:

22号安锦瑞和38号赵陶然小组代码复审核查表

使用javaDate类代数据仓库维度表

使用javaDate类代数据仓库维度表 Date类别: ,返回一个相对日期的毫秒数.精确到毫秒.但不支持日期的国际化和分时区显示. Date 类从Java 开发包(JDK)1.0 就開始进化,当时它仅仅包括了几个取得或者设置一个日期数据的各个部分的方法. 比方说月, 日, 和年. 这些方法如今遭到了批评而且已经被转移到了Calendar类里去了,这样的改进旨在更好的处理日期数据的国际化格式. Calender类: 相对于Date更加强大的时间类,是抽象类,提供了常规的日期改动功能和国际化支持.

Hibernate&lt;二&gt; 映射基础 单个持久类与单个数据库表映射

一.单个持久化类与单个数据库表映射基础 1.在Hibernate应用中,持久化类的访问方法有两个调用者: ①.Java应用程序:调用User对象的getXXX方法,读取User信息.调用setXXX方法,把用户输入的user信息写入到user对象中. ②.Hibernate:调用User对象的getXXX方法,读取user信息,把它保存到数据库调用user对象的setXXX方法,把从数据库中读出的user信息写入到user对象中.Hibernate的session在执行save().update