《C++面向对象高效编程(第2版)》——1.7 类的目的

简介:

本节书摘来自异步社区出版社《C++面向对象高效编程(第2版)》一书中的第1章,第1.7节,作者: 【美】Kayshav Dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.7 类的目的

C++面向对象高效编程(第2版)
设计类的目的必须非常明确。一个优秀的类应该易于理解和使用,必须清楚地向客户说明其目的。我们不能创建一个Color类,既代表花的颜色又代表图形系统中的颜色,它们有完全不同的要求。设计人员没必要为满足一组客户而在类中添加成员函数,这样添加的成员函数总体上与类要完成的任务无关。换言之,每个类都是为特定领域的某种用途而设计的。例如,考虑下面的Person类:

// 糟糕的设计
class Person {
     public:
      Person(/*一些参数 */);
      ~Person();
      char* GetName() const;
      char*GetAddress() const;
      unsigned long GetBankAccountNumber() const;
    //...
};```
GetBankAccountNumber成员函数和类的抽象无关。我们如何知道一个人一定有银行账户?为此,我们需要的人必须是一个银行客户。

有时候,设计人员加入一个成员函数是因为它不适合放在其他地方,或者他们发现某成员函数只能在某受限环境中使用。但是,这样做会破坏抽象,而且让客户很困惑。这个类的设计人员可能混淆了抽象的Person和银行客户。

通过设计人员对类的描述,可以判断该类是否是设计良好的类。这也成为判断优秀类的一个标准。对于优秀的设计,只需用一句话即可描述出类的目的。如果需要用两段文字来描述,则说明这个类中的功能太多(可能互相矛盾),应该将其分解为许多更小的类。另一个标准是类中成员函数的数量,设计优秀的类所包含的成员函数应该介于15~25个。

当客户查看类时,应该很容易明白它能完成的工作和无法完成的工作。类必须简明扼要地说明它的功能和局限性。如果在查看类之后,客户仍不解其用途,则说明类的设计很糟糕,而且很可能是错误的,需要重新设计。
相关文章
|
1天前
|
C++
面向对象的C++题目以及解法2
面向对象的C++题目以及解法2
10 1
存储 编译器 Linux
18 0
|
2天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”
|
2天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
2天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
3天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
3天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
7天前
|
编译器 C语言 C++
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
14 0
|
9天前
|
存储 编译器 C语言
C++类与对象
C++类与对象
3 0
|
11天前
|
存储 人工智能 机器人
【C++面向对象】C++图书管理系统 (源码)【独一无二】
【C++面向对象】C++图书管理系统 (源码)【独一无二】