Effective C++ 阅读笔记 06:继承与面向对象设计(上)

本文详细阐述了面向对象编程中的继承原则,强调public继承建立is-a关系的约束,提醒避免子类与父类同名导致的名称遮掩问题。同时,区分了接口继承和实现继承,讨论了virtual函数的使用及其替代方案,如NVI模式和Strategy设计模式。通过这些策略,可以更好地设计和优化类的继承结构和行为。

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

请记住

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

我的理解

public继承其实是很强的约束条件,必须保证子类能够做到父类能够做到的所有事情。


条款33:继承时不要起和父类相同的名称

请记住

  • derived calsses内的名称会遮掩base classes内的名称。在public继承下从来没有人希望如此。
  • 为了让被遮掩的名称再见天日,可使用using声明式或转交函数(forwarding function)。

我的理解

如题


条款34:区分接口继承和实现继承

请记住

  • 声明一个纯虚函数(virtual func() = 0)的目的是为了让子类只继承函数接口。
  • 声明非纯虚函数(virtual func())的目的,是让子类继承该函数的接口,并缺省实现。
  • 声明non-virtual函数的目的是为了让子类继承函数的接口以及一份强制性实现。

我的理解

类中主要有三种函数,所有函数都指定了接口继承,非纯虚函数提供了缺省实现,非虚函数提供了强制实现


条款35:考虑virtual函数以外的其它选择

请记住

  • virtual函数的替代方案包括NVI手法及Strategy设计模式的多种形式。NVI手法自身是一个特殊形式的Template Method设计模式。
  • 将机能从成员函数移到class外部函数,带来的一个缺点是,非成员函数无法访问class的non-public成员。
  • tr1::function对象的行为就像一般函数指针。这样的对象可接纳“与给定之目标签名式(target signature)兼容”的所有可调用物(callable entities)。

我的理解

一种好的方法就是用NVI手法(模板模式),公有的接口,私有的实现,很好很完美


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值