什么是“实施中的”关系,何时应该使用它?

时间:2016-10-10 23:57:30

标签: c++ oop

我了解到在OOP中我们可以使用继承,因此我们可以创建从基类派生的类。我们称之为“IS-A关系”,例如:一个人来自人类。

还有遏制,这意味着一个类包含另一个类类型的对象,所以我们可以说汽车有轮子。我们称之为“HAS-A关系”。

还有另一种被称为“IS-IMPLEMENTED-FOR-TERMS-OF”的关系,我不确定我理解它。这是否意味着私有继承??

#include <iostream>
using namespace std;

class A {
};

class B : public A {
}; // is-a relationship

class C {
    A& aObj;
}; // C has-a relationship

// is implemented in terms of?? and how and when?

int main()
{
    A a;
    B b; // b is a an A like man is-a human

    C c; // c contains an A's object so C has-a an A's part

    cout << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:3)

C ++中的私有继承有时用于表示&#34;是用&#34;来实现的。关系。如果A私有地继承自B,则意味着A内部具有B的所有状态和行为,并且可以在其自己的实现中使用该行为。

在许多情况下,最好使用组合来执行此操作(只有A有一个类型B的私有数据成员而不是私有继承),但它仍然会偶尔找到一些用途。在C ++ 11中删除函数语法之前,它经常用于创建不允许复制行为的类,并且在某些情况下,如果相关对象为空,则它用于节省空间。但一般来说,只需使用构图。它更容易,更清洁,也不太可能让人迷惑。