任何人都可以解释“HAS-A”和“IS-A”在两个班级之间的含义。
一个例子会有所帮助。
答案 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类的实例而不需要更改代码。