我正在寻找有关构建程序的最佳方法的建议。这就是我现在所拥有的,以及我在设计中看到的问题:
我有一个带有私有构造函数和submit()方法的类,用于仔细控制创建的对象,并将创建的每个对象添加到全局列表中。该程序具有多个功能,可以使用全局列表执行“大”操作。现在,它们作为静态函数在对象类中。这似乎是有意义的,因为它们应该在一个类中,并且它们显然与对象有关。但是,每当我访问一个对象的属性时,我都会被Intellisense用这些“大”函数的列表打招呼,这些函数虽然是关联的,但实际上不应该被一个单独的对象调用:它们会作用于所有对象的列表!但我想不出另一种方法。我是否应该有一个名为Operations的类并将它们全部放入其中?这似乎太分散了。另外,这样我仍然会看到submit()方法,我不能从类中删除而不将构造函数声明为public,我不想这样做。
有什么想法吗? 谢谢!
(对不起,我不确定要标记什么,我知道有很多类似的问题,但我已经困惑了一段时间。随意重新标记,编辑,w / e!谢谢再次!)
答案 0 :(得分: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实例作为全局或单例,并在适当时访问它。
答案 1 :(得分:0)
嗯。你可以做一些这样的事情(从耦合的角度来看)吗?
class Object { };
void ProcessObjects (list<Object *> &objects) { }
list<Object *> &GetGlobalObjects (void);
int main (void)
{
ProcessObjects(GetGlobalObjects());
ProcessObjects(somePossibleTemporaryList);
}
答案 2 :(得分:0)
至少在理解你的描述时,我会将这些函数移到类外,但是将类和函数放在命名空间中。
虽然设计听起来有点奇怪 - 听起来你所拥有的部分是一个物体,但也有部分像物体的集合。如果是这样,那听起来有点像一种相当讨厌的设计气味。