本篇笔记包含 Term 30~35。

Term 30:Proxy classes(替身类、代理类)

Proxy classes 的作用:

  1. 多维数组,operator [] 返回次级数组
  2. 左值/右值的区分
  3. 压抑隐式转换

Term 31:让函数根据一个以上的对象类型来决定如何虚化

假设我们的一个函数,接收两个对象参数,需要根据具体两个对象来确定实施什么操作,几种思路:

  1. 虚函数 + RTTI(运行时期类型辨识):编写多个 if-else 的判断,判断对象类型再操作(可以遇见,这是个糟糕的做法,除非类别有限且固定)
  2. 只使用虚函数:重载不同的传入参数,函数体内调用 this,则只需要维护单个参数的不同类型即可
  3. 仿照虚函数表,创建多个成员函数,效果类似上一条
  4. 使用“非成员(Non-Member)函数”,接收两个参数。初始化一个 map 存储不同类型对的函数指针,再非成员函数体中间接获取并调用这个函数指针

Term 32:在未来时态下发展程序

  1. 提供完整的 classes ——即使某些部分目前用不到。当新的需求进来,你不太需要回头去修改那些 classes
  2. 设计你的接口,使有利于共同的操作行为,阻止共同的错误
  3. 尽量使你的代码一般化(泛化),除非有不良的巨大后果

Term 33:将非尾端类(non~leaf classes)设计为抽象类(abstract classes)

这样可以阻止一些不可靠的行为,限制基类指针的行为。

Term 34:如何在同一个程序中结合 C++ 和 C

  1. 将双方都使用的函数声明为 extern "C"
  2. 如果可能,尽量在 C++中撰写 main
  3. new/delete 和 malloc/free 分开配对使用
  4. 将两个语言间的“数据结构传递”限制于 C 所能了解的形式;C++structs 如果内含非虚函数,倒是不受此限

Term 35:让自己习惯于标准 C++ 语言

尽量使用 C++ 风格和标准的库函数,语法等等