如何在各种类中共享实用程序功能?

时间:2010-10-21 07:14:45

标签: c++ visual-studio-2008 design-patterns

我有一个带有2个实用程序函数getDate和getTime的类Display,如下所示。

class Display
{
public:
  void getDate(char *pDate); //Utility functions for converting to custom format
  void getTime(char *pTime);
};

后来,在其他叫做Retriever的类中,我需要相同的Utility函数getDate和getTime。我不想让getDategetTime函数全局(或类似C函数),以避免意外使用这些函数(这些函数特定于这两个类)。即使将它们包装在命名空间中也不会阻止意外使用。

显示和检索器是不同的类。不能在它们之间使用继承。不能使用Composition和aggregation作为那些类的对象的生命周期将是不同的。它们并不存在(同时)。

有没有什么好的方法可以将效用函数移出显示并在显示和检索器类中使用它们? 将getDate和getTime放在名为Utilities的单独类中,并在Display和Retriever类中使用它的对象是不是很好?

3 个答案:

答案 0 :(得分:2)

根据您在评论/讨论中的其他信息,例如: getDate不依赖于实例数据,getDategetTime不应该是非静态成员函数。理想情况下,它们应该是独立的功能。也许在命名空间中。

将它们和其他相关内容放在自己的模块中。

它可以是纯头文件模块,也可以是由头文件和实现文件组成的单独编译器模块。

将函数放在名称空间中,例如无论是timeutil,还是图书馆的名称。

我建议将它们更改为返回std::string而不是采用原始指针参数,例如

#include <string>

namespace timeutil {
    std::string timeString();
    std::string dateString();
}

干杯&amp;第h。,

答案 1 :(得分:1)

我认为使用命名空间是最合适的。您可以为该命名空间选择名称,以便每个人都知道它的用途:

namespace DisplayRetrieverImplementation {
  void getDate(char *pDate); //Utility functions for converting to custom format
  void getTime(char *pTime);
}

答案 2 :(得分:0)

您可以将您的函数作为另一个类的私有静态成员。并使该类的显示和检索者成为朋友。