zoukankan      html  css  js  c++  java
  • 继承和面向对象设计

    继承与面向对象设计

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

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

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

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

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

    • 接口继承和实现继承不同.在public继承之下,derived classes 总得继承base class的接口.
    • pure virtual函数只具体指定接口继承
    • 简朴的(非纯)impure virtual 函数集体指定接口继承集缺省实现继承
    • non-virtual 函数具体指定接口继承以及强制性实现继承

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

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

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

    • 绝对不要重新定义继承而来的non-virtual函数

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

    • 绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数--你唯一应该覆写的东西--却是动态绑定

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

    • 复合(composition)的意义和public继承完全不同
    • 在应用域(application domain),复合意味着has-a(有一个).在实现域(implementation domain),复合意味is-implemented-in-terms-of(根据某物实现出)

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

    • private 继承意味is-implemented-in-terms-of (根据某物实现出).它通过比复合(composition)的级别低.但是当derived class需要访问protected base class的成员,或需要重新定义继承而来的virtual函数时,这么设计是合理的.
    • 和复合(composition)不同,private 继承可以造成empty base 最优化.这对致力于"对象尺寸最小化"的程序库开发者而言,可能很重要

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

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

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

    • 多重继承的确与正当用途.其中一个情节设计"public 继承某个Interface class"和"private 继承某个协助实现的class"的两相组合.

  • 相关阅读:
    替换gitlab自带的Nginx,并修改仓库存储路径
    linux 内网scp 无密码传输
    centos7 安装docker及Hyperf
    VMware 安装centos 7 及自动挂载共享文件夹
    基于 Thrift + Laravel RPC 调用实现
    PHP计算两个经纬度地点之间的距离
    sql server 2008安装过程中服务器配置出错
    SQL Server2008如何设置开启远程连接
    向上下左右不间断无缝滚动图片的效果(兼容火狐和IE)
    彻底解决Google浏览器CSS居中问题
  • 原文地址:https://www.cnblogs.com/o-v-o/p/10161761.html
Copyright © 2011-2022 走看看