类设计者的检查清单

本文围绕C++类展开,探讨了类是否需要构造函数、无参构造函数、析构函数、虚析构函数等问题,还提及复制构造函数、赋值操作符、关系操作符的使用要点,以及删除数组、参数引用和成员函数声明为const等注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

——————摘自C++沉思录

(注:其中加了一些个人的注释)

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

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

3.你的类需要一个无参构造函数吗?如果使用了自定义的构造函数,那么编译器不会默认生成构造函数,这时候如果需要调用无参构造函数,则必须我们自己显示地写一个。如果为了阻止无参数实例化,还需要考虑数组的问题。

 

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

5.类需要析构函数吗?  三五法则

6.类需要一个虚析构函数吗? 只要有人可能对指向子类的对象父类指针调用delete表达式,父类就需要一个虚析构函数。

 

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

关键在于复制该类对象是否相当于复制其数据成员和基类对象。如果并不相当,就需要复制构造函数。

需要析构函数的类往往也需要拷贝和赋值操作。

需要拷贝操作的类也需要赋值操作,反之亦然。

如果不希望用户复制类的对象,就声明复制构造函数(赋值运算符)为私有的。

 

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

如果需要复制构造函数,往往也还会需要赋值操作符

 

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

自复制问题 ————先释放旧值,再复制

 

10.记得在复制构造函数和赋值操作符的参数类型上加 const 了吗?(X::X(const X&) )

 

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

将类的对象放在容器使用中可能涉及到 == 或 != 以及比较大小等问题。

 

12.删除数组时 你记住用delete[] 吗?

 

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

只有当函数想改变参数时,参数才是非const的。

 

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

只有将成员函数声明为const的,才能把它用于const对象。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值