More Effective C++ 06 杂项讨论

6. 杂项讨论

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

未来式思维只不过是在现在式思维基础上加上一些额外的考虑:

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

未来式思维可增加你的代码重用性、加强其可维护性、使它更健壮,并促使在一个“改变实乃必然”的环境中有着优雅的改变。它必须和“目前的规范”取得平衡。


条款 33:将非尾端类设计为抽象类

如果你有两个具体类 C1 和 C2,而你希望 C2 以 public 方式继承 C1。你应该将原本的双继承体系改为三继承体系:产生一个新的抽象类 A,并令 C1 和 C2 都以 public 方式继承 A。

设计一个抽象类的传统做法是将 destructor 成为纯虚函数;但是勒维支持通过指针而形成的多态特性,base class 无论如何都需要一个 virtual destructor,所以让如此的 destructor 成为纯虚函数,唯一的成本就是必须在 class 定义式之外实现其内容。

将函数声明为纯虚函数,并非暗示它没有实现码(大部分纯虚函数并没有实现码,但是纯虚析构函数是个例外,它们必须被实现出来,因为只要有一个派生类析构函数被调用,它们便会被调用。),而是意味着:

  • 目前这个 class 是抽象的。
  • 任何继承此 class 的具体类,都必须将该纯虚函数重新声明为一个正常的虚函数(也就是不可以令它 =0)。

一般性法则就是:继承体系中的 non-leat(非尾端)类应该是抽象类。如果使用外界供应的程序库,或许可以对此进行变通;但如果代码完全在你的掌控之下,坚持这个 法则,可以带来很多好处,并提升整体软件的可靠度、健壮度、精巧度、扩充度。


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

如果你打算在同一个程序中混用 C++ 和 C,请记住以下几个简单守则:

  • 确定你的 C++ 和 C 编译器产出兼容的目标文件。
  • 双方都使用的函数声明为 extren “C”(为了抑制 name mangling)。
  • 如果可能,尽量在 C++ 中撰写 main。
  • 总是以 delete 删除 new 返回的内存;总是以 free 释放 malloc 返回的内存。
  • 将两个语言间的 “数据结构传递” 限制于 C 所能了解的形式;C++ struct 如果内含非虚函数,就不受此限制。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值