gpt4 book ai didi

c++ - 如何隐藏单个对象的构造函数和 "general"函数?

转载 作者:行者123 更新时间:2023-11-28 03:59:40 25 4
gpt4 key购买 nike

我正在寻找有关构建程序的最佳方式的建议。这是我现在所拥有的,以及我在设计中看到的问题:

我有一个带有私有(private)构造函数和 submit() 方法的类,用于仔细控制创建的对象,并将创建的每个对象添加到全局列表中。该程序有几个函数可以对全局列表执行“大”操作。现在,它们作为静态函数位于对象类中。这似乎是有道理的,因为它们应该属于一个类,而且它们显然与对象相关。但似乎很奇怪,每当我访问一个对象的属性时,Intellisense 也会用这些“大”函数的列表迎接我,虽然它们是关联的,但实际上不应该被单个对象调用:它们作用于所有对象的列表!但我想不出另一种方法来做到这一点。我是否应该有一个名为 Operations 的类并将它们全部放入其中?这似乎太分离了。此外,这样我仍然会看到 submit() 方法,如果不将构造函数声明为公共(public)的,我就无法将其从类中删除,而我不想这样做。

有什么想法吗?谢谢!

(抱歉,我不确定到底要标记什么,而且我知道有很多类似的问题,但我已经困惑了一段时间。随时重新标记、编辑、w/e!谢谢再次!)

最佳答案

我建议你有 2 个类:

数据类“Precious”,用于保存影响该类单个成员的属性、访问器和操作。

  class Treasure; // let's pre-declare this.

class Precious {
private:
BOOL invisible;
Precious() : invisible(FALSE) {}
friend class Treasure. // so it can call the private constructor
public:
BOOL isMine() { return TRUE; }
BOOL iWantsIt() { return TRUE; }
void don() { invisible = TRUE; }
~Precious { printf("need to find mnt/doom here"); exit(1); }
}

一个集合和管理类“Treasure”,它包含创建新成员并将其添加到列表的方法,以及管理和执行跨这些列表的操作的方法。

  class Treasure {
void forgeOne { rings.add( new Precious ); };
void findThemAll {
for (Precious* myPrecious;
{
// implement remote ring call
}
}
void inTheDarknessBindThem {
// need to add check for the one ring
for (Precious* myPrecious;
{
// filter on dark rings
// add binding code.
}
}
Map<Precious*> rings;
}

然后您可以将 Treasure 的实例构建为全局实例或单实例,并根据需要访问它。

关于c++ - 如何隐藏单个对象的构造函数和 "general"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484708/

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