gpt4 book ai didi

c++ - 多态性和私有(private)数据成员

转载 作者:行者123 更新时间:2023-11-30 05:27:32 27 4
gpt4 key购买 nike

首先,我想澄清一下,这个问题与 Scott Meyers 的书 Effective C++(第 3 版)有关,特别是item 22: declare data-members private

我基本上理解它,并且正在尝试将一些东西应用到我的代码中以开始练习它。但是我有一个案例,我不确定如何解决它。基本上我有一些抽象接口(interface)和一些继承,看起来像这样。

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

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

然而,这与第 22 项不一致。我认为最好为派生类提供一个到基类的接口(interface),这在很多情况下都很好用,但在这种情况下,因为多态性用于决定_thing 我们会在 getter 中复制它,以便在派生系统中任何时候我们需要访问它时都需要复制它。

所以我猜这不太好,并且要与第 28 条保持一致:避免返回“句柄”对象内部结构我似乎无法弄清楚如何在不复制 的情况下做到这一点_东西:

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

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

这是必须完成的方式吗?复制(如果经常这样做的话)是不是有点难以复制性能?

我想可能是我的设计有问题。

最佳答案

您可以返回对“事物”的引用:

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

这将避免复制整个对象。

关于c++ - 多态性和私有(private)数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com