天天看点

《C++代码设计与重用》——2.3 Nice类

本节书摘来自异步社区出版社《imperfect c++中文版》一书中的第2章,第2.3节,作者: 【美】martin d.carroll , margaret a.ellis,更多章节内容可以访问云栖社区“异步社区”公众号查看。

c++代码设计与重用

2.3 nice类

我们都知道类会提供某些函数,这些函数要么是在类的代码中被显式声明为公共的(public)或保护的(protected),要么是由编译器在程序需要这些代码时隐式生成的。例如,下面这个类:

它提供了一个缺省构造函数、函数f、一个拷贝构造函数、一个赋值运算符和一个析构函数。而且最后3个函数会在程序需要它们的时候由编译器自动生成。

请考虑下面这个通常有用的函数:

如果x1和x2是某个类x的两个对象,那么我们就可以通过调用swap函数来交换它们的值:

为了使上面这行代码能够通过编译,类x必须提供一个拷贝构造函数、一个赋值运算符和一个析构函数。

现在让我们再来研究另一个通常有用的类:

基于上面代码段,如果想创建一个含有20个x对象的array数组,我们可以这样编写代码:

为了使上面这行代码可以顺利通过编译,x必须提供一个缺省构造函数—否则array构造函数中的new调用将会是非法调用。

最后,考虑下面一个通常有用的函数:

为了在array数组中查找一个值为x的x对象,我们可以编写如下代码:

为了使这行代码能顺利通过编译,类x必须提供相等运算符,或者能够转型一个新的类型,而该类型提供了相等运算符。

下列函数的使用范围非常广;以至于,如果一个类提供了下列所有函数,我们就称这个类为nice类:

缺省构造函数;

拷贝构造函数;

赋值运算符;

相等运算符;

析构函数。

非nice类限制了类的使用性,这种限制有时候是很严重的。因此,可重用类应该尽可能地设计成nice类。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

继续阅读