文章目录

  • Is A

确定你的public继承塑模出is-a关系
避免遮掩继承而来的名称
区分接口继承和实现继承
考虑virtual函数以外的其他选择
绝不重新定义继承而来的non-virtual函数
绝不重新定义继承而来的缺省参数值
通过复合塑模出has-a或“根据某物实现出”
明智而审慎地使用private继承
明智而审慎地使用多重继承

Is A

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

class Bird
{public:virtual void fly() = 0;virtual void fly(int time);void jump();void jump(int time);...private:int x;
};// Penguin is a Bird
class Penguin: public Bird
{public:virtual void fly();void jump();...
};

Penguin重写的方法会遮掩基类Bird方法,即使函数参数不同:

Bird作用域 Penguin作用域
fly fly()、fly(int) fly()
jump jump()、jump(int) jump()
Penguin p;
int x;
...
p.fly(); // success
p.fly(x); // error
p.jump(); // success
p.jump(x); // error

为解决这个问题可以引入 using 说明:

class Penguin: public Bird
{public:using Bird::fly;using Bird::jump; // 让Bird内名为fly和jump的所有东西在Penguin内都可见virtual void fly();void jump();...
};// 调用
Penguin p;
int x;
...
p.fly(); // success
p.fly(x); // success
p.jump(); // success
p.jump(x); // success

此章内容在《大话数据结构》中体现得更好,所以多数内容暂时略去。后续将针对《大话数据结构》作相关笔记。

《Effective C++ 3th》——继承与面向对象设计相关推荐

  1. Effective C++ --6 继承与面向对象设计

    上一篇Effective C++ --5 实现 32.确定你的public继承塑模出is-a关系 (1)public 继承意味着is-a.适用于base class身上的每一件事一定也适用于deriv ...

  2. Effective C++: 06继承与面向对象设计

    32:确定你的public继承塑模出is-a关系 以C++进行面向对象编程,最重要的一个规则是:public继承表示的是"is-a"(是一种)的关系. 如果令class D以pub ...

  3. 【effective c++】继承与面向对象设计

    1.确定你的public继承塑造出is-a关系 public继承意味着is-a.适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derived ...

  4. C++进阶_Effective_C++第三版(六) 继承与面向对象设计 Inheritance and Object-Oriented Design

    继承与面向对象设计 Inheritance and Object-Oriented Design 面向对象编程已经风靡编程界,关于继承.派生.virtual函数等等需要深入了解. 32.确定你的pub ...

  5. 《Effective C++》第三版 第六章 继承与面向对象设计 32~35条例

    文章目录 条款32:确定你的 `public` 继承塑膜出 is-a 关系 故事引入规则 案例说明 小结上代码 公有继承用法 企鹅不会飞 企鹅会飞,但那是错的! 总结 请记住 条款33:避免遮掩继承而 ...

  6. (6)继承与面向对象设计- Effective C++改善程序与设计的55个具体做法(Effective C++: 55 Specific Ways to Improve Your Programs)

    文章目录 32. 确定你的public继承塑模出is-a关系(Make sure public inheritance models "is-a") 33. 避免遮挡继承而来的名称 ...

  7. Effective C++:改善程序与设计的55个具体做法

    Effective C++:改善程序与设计的55个具体做法 二.构造/析构/赋值运算 05 Know what functions C++ silently writes and calls. 06 ...

  8. uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则

    1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...

  9. C++面向对象设计原则详解

    概述 C++面向对象设计原则主要包括以下几点: 依赖倒置原则 开放封闭原则 单一职责原则 里氏替换原则 接口隔离原则 封装变化点原则 面向接口编程原则 优先使用对象组合,而不是类继承 接下来详细的分析 ...

最新文章

  1. 分享9个提高代码运行效率的小技巧
  2. Eclipse利用Maven的插件部署web项目到远程tomcat服务器
  3. 解决svn中文乱码的问题
  4. 瀑布式开发、迭代式开发、螺旋开发、敏捷开发四种开发模式的区别
  5. Lackey:一个示例工具
  6. JavaScript(三)—— JavaScript 函数/JavaScript 作用域/JavaScript 预解析/JavaScript 对象
  7. JEPF 3.1.3 发布,我们的软件机床
  8. jmeter JDBC 连接数据库
  9. Java基础篇:字符串的简单介绍
  10. lua State加载部分库
  11. .netcore 如何获取系统中所有session_C#/.NET/.NET Core定时任务调度组件有哪些?
  12. MyBatis数据输出
  13. >> 读书记录_2015~2020
  14. 读完这100篇论文 就能成大数据高手
  15. TI Simplelinke_CC13X0_SDK_2.10.00.36 (Error -241 @ 0x0)
  16. 使用卷积神经网络进行图片分类 2
  17. docker 进入,退出容器命令
  18. 彩灯控制单片c语言程序,基于51单片机的led彩灯设计。 9个灯(红绿蓝三色)。按键控制 c语言程序...
  19. Android如何减少apk大小
  20. 自己用C语言写NXP S32K116 serial bootloader

热门文章

  1. javascript表格操作的快捷方法
  2. react+antd表格操作列加Dropdown和menu写法
  3. Facebook收款结汇方式?Facebook Audience Network无限额结汇方案?
  4. 学好英语网html首页制作,网页 英语
  5. 第11周项目七 太乐(泰勒)了
  6. 蒙特利尔大学工学院流程
  7. 《编程小白如何写好技术博客》
  8. 在新加坡生活是一种什么体验?
  9. 商标买卖哪个平台最好_商标买卖哪个平台最大?
  10. html导出pdf的四种方式