【发布时间】:2012-03-13 02:21:05
【问题描述】:
谁能解释两个类之间的“HAS-A”和“IS-A”是什么意思。
举个例子会很有帮助。
【问题讨论】:
谁能解释两个类之间的“HAS-A”和“IS-A”是什么意思。
举个例子会很有帮助。
【问题讨论】:
在面向对象的世界中,一个类可以是某种东西,也可以包含某种东西。
例如,Queue 类可能是LinkedList 类的子类(因为链表当然可以用于实现队列)。那是is-a 关系。对链表能做的事,对队列应该也能做。
但是,队列类还可能保存其他信息,例如链表中的项目数(为了提高效率)。
为此,它还可以定义一个名为size 的成员变量。那将是has-a 关系 - 队列不是整数的子类,它只是包含一个整数。
【讨论】:
例如:
class SteeringWheel
{};
class Vehicle
{
virtual void doStuff() = 0;
};
class Car: public Vehicle
{
SteeringWheel sWheel;
virtual void doStuff();
};
【讨论】:
这是两个类之间的两种常见的关系形式。
HAS-A 关系是指一个类 X,它有一个类 Y 作为一个组件,可能通过在类 X 的每个对象中放置一个类 Y 的实例作为一个属性来表示。
IS-A 关系是指类 W 是类 Z,可能是因为类 W 是类 Z 的子类,或者在其继承图中的某处具有类 Z。知道如何处理 Z 类实例的代码应该能够处理 W 类实例,而无需更改代码。
【讨论】: