多态性和私有数据成员

时间:2016-05-14 20:33:59

标签: c++ oop architecture

首先,我想说清楚这个问题与Scott Meyers'预订Effective C ++(第3版),特别是第22项:声明数据成员私有

我确实理解它并试图将一些内容应用到我的代码中以开始练习它。但是,我有一个案例,我不知道如何解决它。基本上我有一些抽象的接口和一些继承看起来像这样。

class abstractSystem {
    ...
protected:
    AbstractThing *_thing;
}

class DerivedSystem : public AbstractSystem {
    // inherits _thing so we can use it here.
}

然而,这与第22项不一致。我认为最好有一个接口到派生类的基类,这在许多情况下都有点好用,但在这种情况下,因为多态用于决定_thing我们会在getter中复制它,以便在派生系统中,只要我们需要访问它,我们就需要复制它。

所以我猜这不是很好,并且与项目28保持一致:避免返回"句柄"对象内部我似乎无法在不复制_thing的情况下弄清楚如何做到这一点:

class AbstractSystem {
protected:
    AbstractThing thing() { return *_thing; }
private:
    AbstractThing *_thing;
}

class DerivedSystem {
    // now we need to use thing() to access _thing implying copy
}

这是必须要做的,而且复制性能有点难(如果经常做的话)?

我想这可能是我的设计错了。

1 个答案:

答案 0 :(得分:1)

您可以返回对'thing'的引用:

protected:
    AbstractThing const& thing() { return *_thing; }

这样可以避免复制整个对象。