类的伟大之处是什么?
类可以帮助你组织代码和分析程序。你可以大致理解为,类可以让你避免犯错,而如果你犯错了,类使你易于寻找错误。也就是说,类大大提高了代码的可维护性。
类是思想和观念的代码形式。类的对象是思想的具体实例在代码上的体现。没有类,读代码的人只能猜测数据和函数的关系——类能清楚地表明这种关系,并且能被编译器理解。有了类,程序的高层结构就更能反映在代码上,而不单单是在注释中。
一个设计良好的类能为用户提供简洁易用的接口,并将其内部结构隐藏起来,用户根本不必了解其内部结构。如果内部结构不应该被隐藏——例如,因为用户需要随意改变类中的任何数据成员——你可以把这种类认为是“普通的老式数据结构(data structure)”;例如:
struct Pair {
Pair(const string& n, const string& v) : name(n), value(v) { }
string name, value;
};
注意,数据结构也可以使用辅助函数,例如构造函数。
设计类时,思考类有哪些方面在任何时刻对其每个对象都是通用的,这会很有用。这种通用的属性被称之为不变要素(invariant)。例如,vector 的不变要素是,其内部有一个指针,指向一系列元素,这些元素的数目保存于一个整型变量。每个构造函数都有责任去构建类的不变要素,这样成员函数才能依赖这些不变要素。成员函数退出时必须保持不变要素的有效性。这种思维方式对于管理资源的类来说更是特别有益,如管理锁(locks)、sockets 和文件的类。例如,一个处理文件的类的不变要素是,它有一个指针,指向一个打开的文件。该类的构造函数负责打开文件,而其析构函数负责释放构造函数获取的资源。例如,该类的析构函数负责关闭构造函数打开的文件:
class File_handle {
public:
File_handle(const char* n, const char* rw)
{ f = fopen(n,rw); if (f==0) throw Open_failure(n); }
~File_handle() { fclose(f); } // destructor
// ...
private:
FILE* f;
};
如果你未曾使用过类,你会觉得这番说明有些地方相当费解并且会低估类的用处。要寻找例子,和所有优秀的教科书一样,TC++PL(C++ 程序设计语言)里有很多例子;例如,漫游标准库。大多数现代 C++ 库都包含类(当然还有其它东西),库使用指南是寻找有用的类的例子的最佳场所之一。
原文地址:http://www.research.att.com/~bs/bs_faq.html#class
本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Bjarne Stroustrup 翻译:antigloss 共同所有,转载请注明原作者和出处。谢谢。