博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective C++ Item 32 确保你的 public 继承模子里出来 is-a 关联
阅读量:5774 次
发布时间:2019-06-18

本文共 1451 字,大约阅读时间需要 4 分钟。

本文senlie原版的,转载请保留此地址:

经验:"public继承"意味 is-a。适用于 base classes 身上的每一件事情一定也适用于 derived classes 身上,

由于每个 derived classes 身上,由于每个 derived class 对象也都是一个 base class 对象。
演示样例:

class Person {...};class Student: public Person {...};void eat(const Person &p); //不论什么人都会吃void study(const Student &s); //仅仅有学生才到校学习Person p;  //p 是人Student s; //s 是学生eat(p);    //ok p是人eat(s);    //ok s是学生。但学生也是(is-a)人study(s);  //ok s是学生study(p);  //error p不是学生
解析:上面的样例仅仅对 public继承才成立。 对private, protected 继承不成立。
public 继承的问题演示样例
1.企鹅是一种鸟。鸟会飞,但企鹅不会飞
class Bird{public:	virtual void fly(); //鸟能够飞};class Penguin: public Bird{ //企鹅是一种鸟};
假设你的软件系统如今以及未来不须要差别会不会飞的鸟的话。
这种“双classes继承体系”就能够了,否则能够进行例如以下更改
class Bird{	//... -->没有声明 fly 函数,鸟不一定会飞};class FlyingBird: public Bird{public:	virtual void fly();};class Penguin: public Bird{	//... -->没有声明 fly 函数};
2.class Square 应该以 public 形式继承 class Rectangle 吗?
class Rectangle{	virtual void setHeight(int newHeight);	virtual void setWidth(int newWidth);	virtual int height() const; //返回当前值	virtual int width() const;	//...};void makeBigger(Rectangle &r) //这个函数用以添加 r 的面积{	int oldHeight = r.height();	r.setWidth(r.width() + 10); //为 r 的宽度加10	assert(r.height() == oldHeight); //推断 r 的高度是否未曾改变}class Square: public Rectangle {...};Square s;//...assert(s.width() == s.height()); //这对全部正方形一定为真makeBigger(s); //因为s 是一种(is-a)矩形。所以我们添加其面积。assert(s.width() == s.height()); //对全部正方形应该仍然为真 --> 但其实因为上一步 makeBigger函数返回。这已经不是真的

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
Java并发之AQS源码分析(二)
查看>>
MySQL快速复制数据库的方法
查看>>
重新认识HTML,CSS,Javascript 之node-webkit 初探
查看>>
linux系统学习第十五天-<<工程师技术>>
查看>>
公网API安全--OAuth认证
查看>>
【转】java 定时执行任务练习
查看>>
Guava-Monitor-Future并发特性
查看>>
lae界面开发工具入门之介绍九--<lua脚本组件篇>
查看>>
noejs内存泄露
查看>>
使用IntelliJ IDEA 14和Maven创建java web项目
查看>>
【九度OJ1512】|【剑指offer7】用两个栈实现一个队列
查看>>
虚拟机下centos复制导致network连接失败问题解决方法
查看>>
Java中Math类常用函数总结
查看>>
libsvm代码阅读:关于Kernel类分析
查看>>
R语言求定积分
查看>>
Android-好的学习网站或者博客
查看>>
web的一些细节
查看>>
简单的servlet容器
查看>>
弄个收藏夹,用搜集文章,省的每次都去发一篇文。
查看>>
HTTP协议的头信息详解
查看>>