Effective C++ 第六章(读书笔记)

32.确定你的 public 继承塑模出 is-a 关系

      “pulic继承”意味 is-a。适用于 base classes 身上的每一件事情一定也适用于dereved classes 身上,因为每一个 derevied class 对象也都是一个 base class 对象。

33.避免遮掩继承而来的名称

      derived classes 内的名称会遮掩 base classes 内的名称。在 public 继承下从来没有人希望如此。

      为了让被遮掩的名称在见天日,可使用 using 声明式或转交函数。

34.区分接口继承和实现继承

      接口继承和实现继承不同。在 public 继承之下,derived classes 总是继承 base class 的接口。

      pure virtual 函数只具体制定接口继承。

      简朴的(非纯)impure virtual 函数具体制定接口继承及缺省实现继承。

      non-virtual 函数具体制定接口继承以及强制性实现继承。

35.考虑 virtual 函数以外的其他选择

      这个套路比较深。

36.绝不重新定义继承而来的 non-virtual 函数

      如题。

37.绝不重新定义继承而来的缺省参数值

      因为缺省参数值都是静态绑定的,所以重新定义也无效,所以,不要这样做。

38.通过复合塑模出 has-a 或“根据某物实现出”

      复合的意义和 public 继承完全不同。

      在应用域,复合意味 has-a。在实现域,复合意味 is-implemented-in-terms-of(根据某物实现出)。我也不懂。。。知道复合的意思就行了。

39.明智而审慎地使用 private 继承

      Private 继承意味 is-implimented-in-terms-of(根据某物实现出)。它通常比复合(composition)的级别低。但是当 derived class需要访问 protected base class 的成员,或需要重新定义继承而来的 virtual 函数时,这么设计是合理的。

      和复合(composition)不同,private 继承可以造成 empty ase 最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要。

40.明智而审慎地使用多重继承

      多重继承比单一继承复杂。他可能导致新的歧义性,以及对 virtual 继承的需要。

      virtual 继承会增加大小,速度,初始化(及赋值)复杂度等等成本。如果 virtual base classes 不带任何数据,将是最具有使用价值的情况。

      多重继承的确有正当用途。其中一个情节涉及“public 继承某个 Interface class”和“private 继承某个协助实现的 class”的两组结合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值