《Effective C++ 3th》——继承与面向对象设计
文章目录
- 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》——继承与面向对象设计相关推荐
- Effective C++ --6 继承与面向对象设计
上一篇Effective C++ --5 实现 32.确定你的public继承塑模出is-a关系 (1)public 继承意味着is-a.适用于base class身上的每一件事一定也适用于deriv ...
- Effective C++: 06继承与面向对象设计
32:确定你的public继承塑模出is-a关系 以C++进行面向对象编程,最重要的一个规则是:public继承表示的是"is-a"(是一种)的关系. 如果令class D以pub ...
- 【effective c++】继承与面向对象设计
1.确定你的public继承塑造出is-a关系 public继承意味着is-a.适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derived ...
- C++进阶_Effective_C++第三版(六) 继承与面向对象设计 Inheritance and Object-Oriented Design
继承与面向对象设计 Inheritance and Object-Oriented Design 面向对象编程已经风靡编程界,关于继承.派生.virtual函数等等需要深入了解. 32.确定你的pub ...
- 《Effective C++》第三版 第六章 继承与面向对象设计 32~35条例
文章目录 条款32:确定你的 `public` 继承塑膜出 is-a 关系 故事引入规则 案例说明 小结上代码 公有继承用法 企鹅不会飞 企鹅会飞,但那是错的! 总结 请记住 条款33:避免遮掩继承而 ...
- (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. 避免遮挡继承而来的名称 ...
- Effective C++:改善程序与设计的55个具体做法
Effective C++:改善程序与设计的55个具体做法 二.构造/析构/赋值运算 05 Know what functions C++ silently writes and calls. 06 ...
- uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则
1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...
- C++面向对象设计原则详解
概述 C++面向对象设计原则主要包括以下几点: 依赖倒置原则 开放封闭原则 单一职责原则 里氏替换原则 接口隔离原则 封装变化点原则 面向接口编程原则 优先使用对象组合,而不是类继承 接下来详细的分析 ...
最新文章
- 分享9个提高代码运行效率的小技巧
- Eclipse利用Maven的插件部署web项目到远程tomcat服务器
- 解决svn中文乱码的问题
- 瀑布式开发、迭代式开发、螺旋开发、敏捷开发四种开发模式的区别
- Lackey:一个示例工具
- JavaScript(三)—— JavaScript 函数/JavaScript 作用域/JavaScript 预解析/JavaScript 对象
- JEPF 3.1.3 发布,我们的软件机床
- jmeter JDBC 连接数据库
- Java基础篇:字符串的简单介绍
- lua State加载部分库
- .netcore 如何获取系统中所有session_C#/.NET/.NET Core定时任务调度组件有哪些?
- MyBatis数据输出
- >> 读书记录_2015~2020
- 读完这100篇论文 就能成大数据高手
- TI Simplelinke_CC13X0_SDK_2.10.00.36 (Error -241 @ 0x0)
- 使用卷积神经网络进行图片分类 2
- docker 进入,退出容器命令
- 彩灯控制单片c语言程序,基于51单片机的led彩灯设计。 9个灯(红绿蓝三色)。按键控制 c语言程序...
- Android如何减少apk大小
- 自己用C语言写NXP S32K116 serial bootloader