Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现层次类系统 我对C++处理这种情况有点陌生,所以我决定不再问单用模式,而是决定问这个问题是否有更好的选择。_C++_Architecture_Singleton_Friend_Class Design - Fatal编程技术网

如何实现层次类系统 我对C++处理这种情况有点陌生,所以我决定不再问单用模式,而是决定问这个问题是否有更好的选择。

如何实现层次类系统 我对C++处理这种情况有点陌生,所以我决定不再问单用模式,而是决定问这个问题是否有更好的选择。,c++,architecture,singleton,friend,class-design,C++,Architecture,Singleton,Friend,Class Design,有没有其他方法来实现一个系统,在这个系统中我们有一个可以访问一行类的主类,它们是彼此之间的朋友?我没有找到任何其他方法来实现这一点:继承将不起作用,因为类之间的工作方式完全不同,使用成员类不是一个选项,因为这样我将构造同一类的另一个实例,而这不是一个选项,因为我得到了一个非原子类,如logger,应该只有一个例子 这就是我的想法: 简而言之: 是的正如您在图表上所示,有很多类可能是彼此之间的朋友 否,不建议这样做,因为您将拥有高度耦合的系统,并且每次更改一个类中的某些内容时,可能会影响所有其他

有没有其他方法来实现一个系统,在这个系统中我们有一个可以访问一行类的主类,它们是彼此之间的朋友?我没有找到任何其他方法来实现这一点:继承将不起作用,因为类之间的工作方式完全不同,使用成员类不是一个选项,因为这样我将构造同一类的另一个实例,而这不是一个选项,因为我得到了一个非原子类,如logger,应该只有一个例子

这就是我的想法:

简而言之:

  • 是的正如您在图表上所示,有很多类可能是彼此之间的朋友

  • ,不建议这样做,因为您将拥有高度耦合的系统,并且每次更改一个类中的某些内容时,可能会影响所有其他类


设计模式(如)和其他技术(如)有助于避免此类情况,并降低成本,以便于维护和拥有更强健的系统。

如果使用正确,单例没有任何问题!所以,在这种特定的情况下,允许使用单音模式创建logger类,这样周围的每个人都可以使用它,但是类间的交互呢?我应该用朋友-朋友的方式,还是我可以做些别的?我的主要目标是确保代码库由执行命令的“模块”组成,如果需要,使用其他类的方法来帮助完成任务。日志记录器通常是单例的好例子。一个CRC32类似乎是错误的,也许在命名空间中使用函数?或者,如果它只是一个函数,那么就保持它为一个函数。“Networking”似乎是一个单一类,但也可以是一个包含多个类的名称空间(
Socket
ClientSocket
ServerSocket
等,或类似的名称空间)。尽量避免交朋友。如果<代码>存档< /代码>应该是一个序列化类,那么考虑一下,而不是使您自己.CRC32比单个函数多一点,它的一组函数在CRC32之上构建(例如,从文件获得CRC,从一个字符串获得ECRT,E.T.C)网络,实际上,不仅仅是一个类,我尽量让事情简单化,这样人们就能理解我在说什么。剩下的唯一问题是,我仍然需要以某种方式确保MainClass中只显示了这些模块的一个实例,并且它们仍然可以通信。我正在尽可能多地重用代码,并尽可能减少实例数量。好的,在CRC32、网络和应用类的级别上,如果我想通过使用其他类已经实现的方法来减少代码库的使用,除了减少实例的数量并远离双向耦合之外,我还应该为它们使用单例模式。明白了,谢谢。