zoukankan      html  css  js  c++  java
  • 条款32:确定public继承中塑造出来的是IS-A关系而不是其他的关系

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

     1 class Recantagle{
     2     virtual void setHeight(int);
     3     virtual void setWidth(int);
     4     virtual int height(int)const;
     5     virtual int width(int)const;
     6     ...
     7 };
     8 void makeBigger(Recantagle & r)
     9 {
    10     int oldHeight = height();
    11     setWidgth(wid);
    12     assert(height() == oldHeight);
    13 }
    上面的makeBigger主要为了保证在makeBigger的过程高度,不会受到改变。
     
    但是在继承体系中,一个正方形的width改变的时候,起height同样也会受到改变,所以上面这项继承实际上是不合理的。
     
    所以从某种方面来说,平时在我们眼中可能理所应当的懂事实际上在继承体系中并不一定能够实现。这里的主要问题是并非一个矩形所拥有的性质对于一个正方形来说都是存在的,所以一般的我们所说的正方形是一个矩形实际上只是英语上的is-A关系而不是实际上继承体系中的is-a关系。
     
    小结: “public”继承意味着 is-a的关系,基于base-class上的每一件事情都应该在derived-class上面成立
  • 相关阅读:
    Grovvy初识
    在eclipse中安装插件
    解决 APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tas
    Axis2 webservice入门--Webservice的发布与调用
    一步一步教你自定义博客园(cnblog)界面
    Enum枚举
    并行与并发
    多线程join(加入)
    守护线程
    停止线程
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4872335.html
Copyright © 2011-2022 走看看