首先考虑的是一个很典型的关系,就是矩形与正方形的关系:

 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上面成立

条款32:确定public继承中塑造出来的是IS-A关系而不是其他的关系的更多相关文章

  1. 读书笔记 effective c++ Item 32 确保public继承建立“is-a”模型

    1. 何为public继承的”is-a”关系 在C++面向对象准则中最重要的准则是:public继承意味着“is-a”.记住这个准则. 如果你实现一个类D(derived)public继承自类B(ba ...

  2. Effective C++ 笔记:条款 32 确定你的public继承塑造出正确的is-a关系

    32 : Make sure public inheritance models "is-a." 0 引言 Inheritance and Object-Oriented Desi ...

  3. Effective C++ -----条款32:确定你的public继承塑模出is-a关系

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

  4. 条款32:确定你的public继承塑模出is-a 关系(Make sure public inheritacne models "is-a")

    NOTE : 1."public继承"意味is-a.适用于base classes  身上的每一件事一定也适用于derived classes身上,因为每一个derived cla ...

  5. 读书笔记_Effective_C++_条款三十二:确定你的public继承继承塑模出is-a关系

    这一条款是说的是公有继承的逻辑,如果使用继承,而且继承是公有继承的话,一定要确保子类是一种父类(is-a关系).这种逻辑可能与生活中的常理不相符,比如企鹅是生蛋的,所有企鹅是鸟类的一种,直观来看,我们 ...

  6. 一个Public的字段引起的,谈谈继承中的new

    一直觉得对c#面向对象这块已经掌握的很好了,因为正常情况下字段一般我们设计成私有的,今天突然想到一个实验,如下有两个很简单的类: public class Farther { ; public vir ...

  7. 【32】确定你的public继承塑模出Is-A关系

    1.public继承表示Is-A关系,也就是满足里氏代换.与之相对应的,private继承表示根据某物实现出,不满足里氏代换.子类对象初始化父类引用,编译通不过. 2.考虑下面的需求,企鹅继承鸟,Bi ...

  8. Effective C++ Item 32 确保你的 public 继承模子里出来 is-a 关联

    本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:"public继承"意味 is-a.适用于 base classe ...

  9. c/c++ 继承与多态 继承中的public, protected, private

    问题:类B私有继承类A,类A有个protected成员,那么在类B的成员函数里是否可以使用类A的protected成员? 可以使用. 估计有的同学说不对吧,类B都私有继承了类A了,怎么还能访问类A的p ...

随机推荐

  1. SQL SERVER自动化运维系列

    SQL SERVER自动化运维系列 转自:https://www.cnblogs.com/zhijianliutang/p/5001142.html 本系列为SQL SERVER自动化运维的一些操作技 ...

  2. linux一路填坑...

    1.安装ubuntu 从ubuntu9.0开始,一路更新,越来越垃圾,更可恶的是工作上经常指定特定的版本,于是乎,我电脑里装了n个版本的ubuntu. Win7 + Ubuntu 15.10 1)装完 ...

  3. mongo常用查询

    复杂查询: and: or: lte,gte,=: and+lt:  , 逗号表示and, $lt小于写在值当中 查询实例: 找到含有指定数据文档 查找条件spcode有1个字符长度的文档 db.sp ...

  4. 自己写的一个简单PHP采集器

    自己写的一个简单PHP采集器 <?php //**************************************************************** $url = &q ...

  5. oracle 创建视图、修改视图、删除视图、利用视图操作基本表

    转:http://blog.sina.com.cn/s/blog_6b58d2fa0100rgvw.html 1.使用create or replace view命令创建视图 语法格式: create ...

  6. Wannafly交流赛1 _A_有理数 【水】

    Wannafly交流赛1 A有理数 [水] 链接:https://www.nowcoder.com/acm/contest/69/A 来源:牛客网 题目描述 有一个问题如下: 给你一个有理数v,请找到 ...

  7. NIO复习02

    Selector 1. Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管 ...

  8. SpringBoot RedisMQ消息队列与发布订阅

    SpringBoot简单整合RedisMQ消息队列和发布订阅 注:RedisMq消息队列使用redis数组实现,leftpush存一,rightpop取一. 1.application.propert ...

  9. systemverilog interface杂记

    随着IC设计复杂度的提高,模块间互联变得复杂,SV引入接口,代表一捆连线的结构. Systemverilog语法标准,新引入一个重要的数据类型:interface. interface主要作用有两个: ...

  10. StringUtils用法(isNotEmpty和isNotBlank)

    isNotEmpty将空格也作为参数,isNotBlank则排除空格参数 参考 Quote StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String ...