标签:函数 实例 继承 编程 C++ 虚拟 析构 基类 构造函数
目录
第32条 弄清所要编写的是哪种类
了解自我:有很多种不同的类。弄清楚要编写的是哪一种。
不同种类的类适用于不同用途,因此遵循着不同的规则。
-
值类(如std::pair, std::vector)模仿的是内置类型。一个值类应该:
- 有一个公用析构函数、复制构造函数和带有值语义的赋值;
- 没有虚拟函数(包括析构函数);
- 是用作具体类,而不是基类(见第35条);
- 总是在栈中实例化,或者作为另一个类直接包含的成员实例化。
-
基类是类层次结构的构成要素。一个基类应该:
- 有一个公用而且虚拟,或者保护而且非虚拟的析构函数(见第 50条),和一个非公用复制构造函数和赋值操作符(见第53条);
- 通过虚拟函数建立接口;
- 总是动态地在堆中实例化为具体派生类对象,并通过一个(智能)指针来使用。
-
不严格地说来,traits类是携带有关类型信息的模板。一个traits类应该:
- 只包含typedef和静态函数,没有可修改的状态或者虚拟函数;
- 通常不实例化(其构造一般是被禁止的)。
-
策略类(通常是模板)是可插拔行为的片段。一个策略类应该:
- 可能有也可能没有状态或者虚拟函数;
- 通常不独立实例化,只作为基类或者成员。
-
异常类提供了不寻常的值与引用语义的混合:它们通过值抛出,但应该通过引用捕获(见第73条)。一个异常类应该:
- 有一个公用析构函数和不会失败(no-fail)的构造函数(特别是一个不会失败的复制构造函数,从异常的复制构造函数抛出将使程序中止);
- 有虚拟函数,经常实现克隆(见第54条)和访问(visitation);
- 从std::exception虚拟派生更好。
-
附属类一般支持某些具体的惯用法(如 RAII,见第 13条)。正确使用是很容易的,想误用反倒难了(具体例子见第53条)。
标签:函数,
实例,
继承,
编程,
C++,
虚拟,
析构,
基类,
构造函数
From: https://www.cnblogs.com/yubo-guan/p/18399853