【问题标题】:What is the "is-implemented-in-terms-of" relationship, and when should I use it?什么是“在条款中实现”关系,我应该什么时候使用它?
【发布时间】:2016-10-10 23:57:29
【问题描述】:

我了解到在 OOP 中我们可以使用继承,这样我们就可以从基类派生类。我们称之为“IS-A 关系”,例如:一个人是从人类类派生的。

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

还有另一种关系称为“IS-IMPLEMENTED-IN-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;
}

【问题讨论】:

  • @SamVarshavchik 我不明白
  • @SamVarshavchik 您对此有何看法,正如 scott meyers 所说:artima.com/intv/meaningP.html
  • @Syfu_H OP 的问题对我来说似乎完全合理 - 私有继承通常是这样描述的。
  • @templatetypedef 谢谢
  • @SamVarshavchik 现在可以回答时不要冒犯

标签: c++ oop


【解决方案1】:

C++ 中的私有继承有时用来表示“被实现”的关系。如果 A 从 B 私有继承,则意味着 A 在内部拥有 B 的所有状态和行为,并且可以在自己的实现中使用该行为。

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

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2011-08-18
    • 2017-03-21
    • 2010-09-05
    相关资源
    最近更新 更多