zoukankan      html  css  js  c++  java
  • Effective C++学习笔记(六)

    继承与面向对象设计

    条款三十二 确定你的public继承是一个is-a的关系

    • public继承,是一个is-a的关系。因为基类身上的每一件事情一定也适用于继承类身上,因为每一个继承类对象也是一个基类对象。

    条款三十三 避免遮掩继承而来的名称

    • 名字是什么?一朵玫瑰叫任何名字还是一样芬芳。

    • 子类内的名称会遮掩父类内的名称。

    条款三十四 区分接口继承和实现继承

    • 声明一个纯虚函数(virtual func() = 0)的目的是为了让子类只继承函数接口

    • 声明非纯虚函数(virtual func())的目的,是让子类继承该函数的接口,并缺省实现。

    • 声明non-virtual函数的目的是为了让子类继承函数的接口以及一份强制性实现

    条款三十五 考虑virtual函数以外的其他选择

    条款三十六 绝不重新定义继承而来的non-virtual函数

    • 动态绑定(virtual)和静态绑定(non-virtual)的区别

    条款三十七 绝不重新定义继承而来的缺省参数值

    • 动态绑定(virtual)和静态绑定(non-virtual)的区别

    条款三十八 通过复合塑模出has-a或“根据某物实现出”

    • 复合,是类型之间的一种关系,当某种类型的对象内含有其他类型的对象,便是这种关系。

    条款三十九 明智而谨慎使用private继承

    • 尽可能使用复合,必要时使用private

    条款四十 明智而谨慎使用多重继承

    • 多重继承比单一继承复杂,可能导致新的歧义

    • virtual继承会增加大小、速度、初始化、赋值等成本,如果是virtual base class不带任何数据,将是最有实用价值的情况

  • 相关阅读:
    状态模式
    $和@的特殊处理
    Windows服务调试状态下用Console启动
    AutoResetEvent
    await和async
    计算a,b,c的排列组合
    百度地图:通过经纬度获得位置信息和距离
    装饰模式
    vue+h-ui+layUI完成列表页及编辑页
    为什么memset不能将数组元素初始化为1?
  • 原文地址:https://www.cnblogs.com/whutao/p/10869753.html
Copyright © 2011-2022 走看看