C ++ OOP:哪些函数可以放入类中?

时间:2010-04-29 16:46:55

标签: c++ design-patterns

假设我有一个班级:

class a
{
public:
  void load_data( );
private:
  void check_data( );
  void work_data( );
  void analyze_data( );
}

这些函数都对类或其成员执行某些操作。

然而这个功能:

bool validate_something( myType myData )
{
     if ( myData.blah > 0 && myData.blah < 100 )
     {
        return true;
     }
     return false;
}
  • 与班级有关,只会被它调用,所以在其他任何地方都不需要

  • 对班级或其成员不做任何事 - 只是一个小的“实用”功能

放置validate_something的位置?课堂内外?

5 个答案:

答案 0 :(得分:11)

如果功能是

  • 课外不要求,
  • 不需要访问类成员(或者作为具有成员作为参数的自由函数可能有意义)

然后我倾向于使它成为实现文件中私有命名空间内的自由函数。我不想使用私有函数,因为它们在头文件中公开了实现细节(并且还没有遇到Neil的问题),我宁愿避免重新编译实现更改。

答案 1 :(得分:5)

将其设为私有静态类成员。我曾经倾向于创建这些非类成员并将它们放在实现文件中的无名空间中,但似乎它们几乎总是最终需要成为类成员(或者需要移动到其他地方 - 也许是为了验证库,在你的例子中),随着代码的变化,所以现在我几乎总是让它们成为静态成员。

请注意在整个答案中使用“几乎”作为限定词: - )

答案 2 :(得分:0)

如果此方法是仅由类使用的实用程序,我将使其成为类的私有方法。通过这种方式,它被封装而不是“污染”您的公共API。

答案 3 :(得分:0)

假设myType也是一个struct / class,为什么不将validate_something作为myType的方法?

答案 4 :(得分:0)

据我了解,这不是一种方法。只需将它的定义放在cpp文件中,高于使用它的方法的定义。如果您的所有方法定义都在您的类中内联您必须将函数的原型放在类定义上方的标题中,但该定义仍然可以在cpp文件中。