gpt4 book ai didi

c++ - 由其他更大的类问题组成的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:14 24 4
gpt4 key购买 nike

假设您有一个包含许多私有(private)成员变量的类。每个成员变量都有一个公共(public)的 getter 和一个 setter 函数:

class Foo
{
public:
int GetA() const { return m_a; }
:
int GetZ() const { return m_z; }

void SetA(int val) { m_a = val; }
:
void SetZ(int val) { m_z = val; }

private:
int m_a;
:
int m_z
};

现在我们有第二个类,它由 Foo(除其他外)组成:

class Bar
{
private:
// some instances of other classes of about the same complexity as Foo
Foo m_foo;
};

所以 Bar 本质上是一个类,它将其他类的实例绑定(bind)到一个实体中。

传递给 Bar 实例的函数需要访问 m_foo 以便它们可以调用它的 getter 和 setter 函数。注意到 Scott Meyers 在 Effective C++(第 3 版 - 第 28 项)中的建议,我不愿意添加向 m_foo 返回“句柄”的内容,例如

Foo& GetFoo() const { return m_foo; }   // dubious const, I know

除了复制 Bar 中的每个 getter 和 setter 之外,我还有其他选择吗?

我正在处理一些遗留代码,这些代码足够懒惰以公开“m_foo”!但这违背了 Scott 的其他一些建议(在本例中为项目 #22 - “声明数据成员私有(private)”)。

有什么方法可以摆脱这种束缚吗?

最佳答案

您应该公开数据成员。

它在概念上已经是公开的,无论如何,如果你像你描述的那样给 Bar getter 和 setter。这同样适用于 getter 返回引用的任何 getter/setter 对。 (除非您可以包含前/后 Hook ,但这是与封装不同的问题。)

关于c++ - 由其他更大的类问题组成的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764239/

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