类设计者的核查表
1.你的类需要一个构造函数吗?(我们需要他来隐藏复杂类的内部工作方式)
2.你的数据成员是私有的吗?(通常应该是这样的)
3.是不是每个构造函数初始化所有的数据成员?
4.类需要析构函数吗?(不是所有有构造函数的类都需要析构函数)
5.类需要一个虚析构函数吗?(有些类需要虚析构函数只是为了声明他们的析构函数是虚的.当然,不用做基类的类是不需要虚构函数的:任何虚函数只有在继承的情况下才有用.)
例如:
struct B{
string s;
};
struct D:B{
string t;
}
int main()
{
B* bp=new D;
delete bp;
}
这里的B必须有一个虚析构函数,否则delete会报错.
struct B{
string s;
virtual ~B(){}
};
虚析构函数通常是空的.
6.你的类需要复制构造函数吗?(很多时候答案是"不",但是有时候答案是"Yes".关键在于复制该类的对象是否就相当于复制其数据成员和基类对象.如果并不相当就需要复制构造函数.)
7.你的类需要一个赋值操作符吗?(如果需要复制构造函数,同理多半也需要一个赋值操作符)
8.你的赋值操作符准确的将对象赋给对象本身吗?(赋值总是用新值取代目标对象的旧值.如果原对象和目标对象是同一个,而我们必须"先释放旧值,再复制".)
9.你的类需要定义关系操作符吗?
10.删除数组时你记住了用delete[]吗?([]这个奇怪的语法之所以存在,是因为C++希望在保持与C兼容性的同时关注效率.
11.记得在复制构造函数和赋值操作符的参数类型中加上const了吗?
12.如果函数有引用参数,他们应该是const引用吗?(只有当函数想改变参数时,它才不用const声明的引用参数.
13.记得适当地声明成员函数为const的了吗?(如果确信一个成员函数不用修改它的对象,就可以声明它为const.
发表于 @ 2008年09月29日 19:35:00 | 评论( loading... ) | 举报| 收藏