【问题标题】:What do "has-a" and "is-a" mean? [duplicate]“has-a”和“is-a”是什么意思? [复制]
【发布时间】:2012-03-13 02:21:05
【问题描述】:

谁能解释两个类之间的“HAS-A”和“IS-A”是什么意思。

举个例子会很有帮助。

【问题讨论】:

    标签: c++ oop


    【解决方案1】:

    在面向对象的世界中,一个类可以某种东西,也可以包含某种东西。

    例如,Queue 类可能LinkedList 类的子类(因为链表当然可以用于实现队列)。那是is-a 关系。对链表能做的事,对队列应该也能做。

    但是,队列类还可能保存其他信息,例如链表中的项目数(为了提高效率)。

    为此,它还可以定义一个名为size 的成员变量。那将是has-a 关系 - 队列不是整数的子类,它只是包含一个整数。

    【讨论】:

      【解决方案2】:
      • 汽车就是车辆
      • 汽车有方向盘

      例如:

      class SteeringWheel
      {};
      
      class Vehicle
      {
          virtual void doStuff() = 0;
      };
      
      class Car: public Vehicle
      {
          SteeringWheel  sWheel;
          virtual void doStuff();
      };
      

      【讨论】:

      • 我努力寻找一个体面的例子,并且确实考虑过这一点,但我倾向于将方向盘放在层次结构的更高层(例如,它涵盖卡车和一些船)。
      • @Loki Astari 非常感谢你的例子。类之间是否只有这两种关系??:)
      • @kovenzhang:这只是一个简单的经验法则,可以帮助您思考。在现实世界中,事物永远不会被切割和干燥,界限可能会模糊,还有其他看待事物的方式。但这是一种非常好的技巧,可以让您站在思考手头问题的起点。
      【解决方案3】:

      这是两个类之间的两种常见的关系形式。

      HAS-A 关系是指一个类 X,它有一个类 Y 作为一个组件,可能通过在类 X 的每个对象中放置一个类 Y 的实例作为一个属性来表示。

      IS-A 关系是指类 W 是类 Z,可能是因为类 W 是类 Z 的子类,或者在其继承图中的某处具有类 Z。知道如何处理 Z 类实例的代码应该能够处理 W 类实例,而无需更改代码。

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 1970-01-01
        • 2020-02-15
        • 2021-03-31
        • 2011-04-16
        • 2020-10-04
        • 1970-01-01
        • 2019-02-05
        相关资源
        最近更新 更多