类设计者的核查表

设计一个类的时候需要考虑的问题:

1、你的类是否需要一个构造函数


2、你的数据成员是否私有化

使用函数返回私有数据成员的值,并且函数要使用const,说明私有数据成员不能被修改。


3、你的类是否需要一个无参的构造函数

能否定义成数组的形式


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

初始化时构造函数的主要任务


5、类是否需要析构函数

看类是够使用了new,及是否分配了 资源


6、类是否需要一个虚析构函数

 struct B{

string s;

};


struct D:struct B

{

string t

};


int main()

{

B* dp = new D;

delete dp;


return 0;

}

delete dp这语句会调用错误的析构函数,因为没有动态绑定,也就是没有虚函数,他会调用B的析构函数,如果将B的析构函数定义成virtual的话,这个语句会调用D的析构函数

这里的struct B应该要有一个虚析构函数

struct B

{

string s;

virtual ~B()

{

}

}


7、类是否需要复制构造函数

复制该类的对象是否就是相当于copy类的数据成员和基类对象,如果是的话,就么有必要,否则应该定义复制构造函数

例如:String类,保存String的值是char*data,

当复制构造函数调用的时候,如果没有定义,二者将指向共同的地址


8、类是否需要一个赋值操作符

一般和7共同出现


9、类的赋值操作符能否正确的将对象赋给对象本身

String& String::operator=(String &other)

{

if(&other!=*this){

           delete []data;

           data = new char[strlen(other.data)+1]

     strcpy(data,other.data)             

return *this;    

         }

        return *this;

}

这个函数那个if语句主要的作用是保证能够自己赋给自己的时候不会出现错误。

假设没有if判断,当出现自己赋值给自己的时候,delete语句会删除数据,other.data的内容页删除。。。。


10、类是否需要定义关系操作符

可能需要排序或者是比较操作


11、删除数组时,时候使用了 []delete

这一点是和c语言的malloc函数兼容的同时关注效率。


12、在赋值操作符和复制构造函数的参数中加上const

因为二者的参数只是想当与复制,没有修改的必要,并且绑定一个非const引用到一个临时的对象时非法的,使用X::X(X&)作为复制构造函数,是不会允许任何特殊表达式的结果


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

只有但函数想改变参数的值得时候,才不适用const,否则一般的情况下都需要加上const

因为右值不能够复制给非const的引用变量上。


14、适当的声明成员函数为const

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值