Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “你做什么?”;has-a“;及;is-a";什么意思?_C++_Oop - Fatal编程技术网

C++ “你做什么?”;has-a“;及;is-a";什么意思?

C++ “你做什么?”;has-a“;及;is-a";什么意思?,c++,oop,C++,Oop,有人能解释一下“HAS-A”和“IS-A”在两个类之间的含义吗 举个例子会很有帮助。在面向对象的世界中,类可以是某物,也可以包含某物 例如,队列类可以是链接列表类的子类(因为链接列表当然可以用于实现队列)。这是一种is-a关系。您可以对链表执行的所有操作,都应该能够对队列执行 但是,queue类还可以保存其他信息,例如链表中的项目数(为了提高效率) 为此,它还可以定义名为size的成员变量。这将是一个has-a关系-队列不是整数的子类,它只是包含一个整数。 汽车就是汽车 汽车有方向盘 例如:

有人能解释一下“HAS-A”和“IS-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();
};