类中的C++静态向量

类中的C++静态向量,c++,class,vector,C++,Class,Vector,我正在为我的计算机科学课程做一个关于订单系统的项目,我想知道在订单类中使用静态向量来包含我所有的订单是最好的做法,还是应该在我的主程序中使用它?我仍在努力解决所有问题,但基本上,其中哪一个更好,或者是否有另一种完全我应该探索的方法: class Order { public: static vector<Order> orders; //should this be private instead? } int main(){ vector<Order> orders;

我正在为我的计算机科学课程做一个关于订单系统的项目,我想知道在订单类中使用静态向量来包含我所有的订单是最好的做法,还是应该在我的主程序中使用它?我仍在努力解决所有问题,但基本上,其中哪一个更好,或者是否有另一种完全我应该探索的方法:

class Order {
public:
static vector<Order> orders; //should this be private instead?
}

int main(){
vector<Order> orders; //should I just pass this to my methods?

}

决定对象的静态列表是否有意义,以及哪个类应该保存这些对象可能取决于为什么以及如何使用对象列表。因此,在没有关于用例更具体一点的情况下,像“做”或“不做”这样的明确答案可能是基于意见的

以下不是答案,因为缺少用例。但让我和你们分享一些想法:

我建议表达列表的含义/目的,例如有意义地命名变量。这可能是openOrders、allOrderObjects、sharedOrders

与此相关,您可能应该隐藏使用向量的实现细节。尤其是你甚至向公众公开这个向量的事实使得你很难保证整个程序的意义。例如,如果意思是openOrders,谁会阻止某人将关闭的订单添加到列表中

所以我会把向量隐藏起来,让它成为私有的或者至少是受保护的;添加限制访问的控制函数,命名这些函数以使目的变得明显,并限制对列表的访问,以确保正确的含义

根据含义,您还可以重新考虑数据结构向量。也许映射更合适,例如,如果订单具有唯一的真实标识符,如与客户共享的订单号,并且如果您希望确保不使用相同的订单号创建两次对象

让我停在这里。也许你能从社区得到更多的想法


但我认为主要的问题是:弄清楚列表的意义/目的。

一个订单知道所有其他订单有意义吗?静态列表确实有点异味,它们破坏了数据隐藏,使代码更难扩展。显然,我看不出您想要做什么,但您可能应该将您的订单列表作为某种管理器或系统的成员。创建一个不同的类来包含所有订单。喜欢高级餐厅吗?我建议不要使用静态向量