条款32:确定public继承中塑造出来的是IS-A关系而不是其他的关系
2024-08-27 23:57:22
首先考虑的是一个很典型的关系,就是矩形与正方形的关系:
class Recantagle{
virtual void setHeight(int);
virtual void setWidth(int);
virtual int height(int)const;
virtual int width(int)const;
...
};
void makeBigger(Recantagle & r)
{
int oldHeight = height();
setWidgth(wid);
assert(height() == oldHeight);
}
上面的makeBigger主要为了保证在makeBigger的过程高度,不会受到改变。
但是在继承体系中,一个正方形的width改变的时候,起height同样也会受到改变,所以上面这项继承实际上是不合理的。
所以从某种方面来说,平时在我们眼中可能理所应当的懂事实际上在继承体系中并不一定能够实现。这里的主要问题是并非一个矩形所拥有的性质对于一个正方形来说都是存在的,所以一般的我们所说的正方形是一个矩形实际上只是英语上的is-A关系而不是实际上继承体系中的is-a关系。
小结: “public”继承意味着 is-a的关系,基于base-class上的每一件事情都应该在derived-class上面成立
最新文章
- Oracle数据库like和not like使用
- 360等杀掉了app的主进程后 ,如何自动开启 如何防止被kill
- Autolayout学习(1)-了解Autoreszing
- 我所了解的 京东、携程、eBay、小米 的 OpenStack 云
- Xamarin.Android开发实践(十三)
- A Walk Through the Forest[HDU1142]
- Dynamics CRM 2011 JScript
- Knockout
- 学无止境,学习AJAX,跨域(三)
- Centos 6.4 openNebula4
- BZOJ 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛( BFS )
- ubuntu下安装opencv库+Python2.7环境安装及开发摄像头拍照应用
- linux虚拟机ip地址更改
- TeamViewer连CentOS
- https遇到自签名证书/信任证书
- Mysql乱码问题总结
- jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等
- 51Nod1362 搬箱子 排列组合,中国剩余定理
- 外网访问SQLServer数据库holer实现
- 20155211 Exp4 恶意代码分析
热门文章
- 安装指定版本的Ionic或Cordova(转载)
- 在PC上调试微信手机页面的三种方法
- Jupyter Notebook修改目标文件
- xlrd,xlwt操作Excel实例
- s5_day2作业
- 介绍Web项目中用到的几款表单验证插件
- systemverilog interface杂记
- kali 2016:mount ntfs 分区只读 --Falling back to read-only mount because the NTFS partition is in an unsafe state.
- vi使用技巧(转载)
- LeetCode——Number Complement