仅包含公共函数的C ++类

时间:2014-07-08 08:05:35

标签: c++ design-patterns

我想要一个只包含公共函数的类, 例如:

class foo
{
    public:
        int f1(param1, param2) ;
        void f2(param1, param2);
};

Class没有状态,它只是操纵输入参数, 表现得像辅助类,

这是一个好的设计吗?还是需要特殊模式呢? 模式的名称是什么?

3 个答案:

答案 0 :(得分:7)

让它们成为独立的功能。并非C ++中的所有内容都必须在类中。例如,如果你看一下STL,你会发现它有很多独立功能。

答案 1 :(得分:5)

简答:在命名空间内使用函数。

namespace foo
{
    int f1(param1, param2);
    void f2(param1, param2);
}

但是,如果您的应用程序具有OO设计,您应该问自己为什么需要一组只操作输入参数的函数。 相信我:your code is trying to tell you something: - )

在你的代码片段中,你使用了虚拟名称(foo,f1,f2,param1,param2),所以我无法猜测你的函数是做什么的。但也许你的函数在相同的参数上运行:在这种情况下,你可以将参数提升为一个类。

在:

bool IsLeapYear( int date );
void IncrementDay( int date, int numOfDays );

后:

class Date
{
    public:
        bool IsLeapYear() const;
        void IncremetDay( int numOfDays );
    private:
        int daysFromOrigin;
};

如果您的函数采用不同的参数,您可以考虑将您的函数分配给OO设计中的现有类(假设您确实需要OO设计!)。

最后,如果您的函数不相关,您可以考虑将它们中的每一个移动到现有类中,即使是静态方法(它实际上取决于函数的含义)。

关于你的最后一个问题"它是一个好的设计吗?",这取决于你正在做什么设计

  • 面向对象的设计:可能它不是一个好的面向对象设计,但没有更多的背景,很难说
  • 程序设计:没关系
  • 功能设计:没关系

根据您的范例,这可能是也可能不是一个好的设计, 当然,这不是一个好的C ++ 成语:你应该在命名空间内使用自由函数,而不是只使用静态方法的类。

答案 2 :(得分:0)

如果要在没有类和实例的情况下调用它们,请确保将方法声明为静态。

然后您可以使用以下语法调用它们:

foo::f1(param1, param2)

将它们放在一个类而不是一个结构中或者让它们独立运行会使你编写更多的OO,它可以很容易地建模(使用UML或类似)并在系统的其他部分之间创建关系(通过继承,多态等)

如果您的程序的其余部分是OO,那么它将使其与程序的其余部分保持一致。

所以我说是的,这是一个很好的设计。