C++ “你做什么?”;has-a“;及;is-a";什么意思?
有人能解释一下“HAS-A”和“IS-A”在两个类之间的含义吗C++ “你做什么?”;has-a“;及;is-a";什么意思?,c++,oop,C++,Oop,有人能解释一下“HAS-A”和“IS-A”在两个类之间的含义吗 举个例子会很有帮助。在面向对象的世界中,类可以是某物,也可以包含某物 例如,队列类可以是链接列表类的子类(因为链接列表当然可以用于实现队列)。这是一种is-a关系。您可以对链表执行的所有操作,都应该能够对队列执行 但是,queue类还可以保存其他信息,例如链表中的项目数(为了提高效率) 为此,它还可以定义名为size的成员变量。这将是一个has-a关系-队列不是整数的子类,它只是包含一个整数。 汽车就是汽车 汽车有方向盘 例如:
举个例子会很有帮助。在面向对象的世界中,类可以是某物,也可以包含某物 例如,
队列
类可以是链接列表
类的子类(因为链接列表当然可以用于实现队列)。这是一种is-a
关系。您可以对链表执行的所有操作,都应该能够对队列执行
但是,queue类还可以保存其他信息,例如链表中的项目数(为了提高效率)
为此,它还可以定义名为size
的成员变量。这将是一个has-a
关系-队列不是整数的子类,它只是包含一个整数。- 汽车就是汽车
- 汽车有方向盘
这是两个类之间关系的两种常见形式 HAS-A关系指的是一个类X,它有一个类Y作为组件,可能通过在类X的每个对象中放置一个类Y的实例作为属性来表示
IS-A关系指的是类W,它是类Z,可能是因为类W是类Z的子类,或者在其继承图的某个地方有类Z。知道如何处理类Z的实例的代码应该能够处理类W的实例,而不需要修改代码。我努力寻找一个合适的示例,并确实考虑过这一点,但我倾向于将方向盘放在层次结构的更高层(例如,它包括卡车和一些船只)@Loki Astari非常感谢你的例子。类之间是否只有两种关系???:@kovenzhang:这只是一个简单的经验法则,可以帮助你思考这个问题。在现实世界中,事情从来没有那么简单,界线可能会模糊,还有其他看待事物的方式。但这是一个非常好的技巧,可以让你从一个起点来思考手头的问题。
class SteeringWheel
{};
class Vehicle
{
virtual void doStuff() = 0;
};
class Car: public Vehicle
{
SteeringWheel sWheel;
virtual void doStuff();
};