“has-a”和“is-a”是什么意思?

时间:2012-03-13 02:21:06

标签: c++ oop

任何人都可以解释“HAS-A”和“IS-A”在两个班级之间的含义。

一个例子会有所帮助。

3 个答案:

答案 0 :(得分:3)

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

例如,Queue类可能 LinkedList类的子类(因为链接列表当然可以用于实现队列)。这是is-a关系。你可以对链表做的一切,你应该能够做到队列。

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

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

答案 1 :(得分:3)

  • 汽车是车辆
  • 汽车有方向盘

例如:

class SteeringWheel
{};

class Vehicle
{
    virtual void doStuff() = 0;
};

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

答案 2 :(得分:1)

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

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

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