2010-04-29 38 views
6

假设我有一个类:C++ OOP:将哪些函数放入类中?

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?课内或课外?

+0

你可以使它成为一个静态成员 – Tim 2010-04-29 17:07:34

回答

4

让它成为私人的static class member。我曾经倾向于将这些非类成员放在实现文件中的无名称名称空间中,但似乎他们几乎总是最终需要成为类成员(或者需要将其移至其他地方 - 可能需要验证库,在你的例子中),随着代码的变化,所以现在我几乎总是让它们成为静态成员。

请注意使用“几乎”在整个这个答案:-)

+1

为什么一个函数*需要*成为一个静态成员,而不是在impl文件中的无名称命名空间?或者,您是否只需要这样做就可以在需要获取状态数据时保存工作? – 2010-04-29 16:58:49

+0

为什么你让它们成为静态成员而不是简单的成员函数? – 2010-04-29 16:59:50

+0

@John根据我的经验,实现文件中的帮助器函数几乎总是最终需要迁移到类中。这是纯粹的权宜之计。 – 2010-04-29 17:03:24

0

如果这个方法是一个只被这个类使用的实用程序,我会让它成为这个类的私有方法。这样,它被封装,而不是“污染”你的公共API。

0

假设是的myType也是一个结构/类,你为什么不使validate_something的的myType的方法预选赛?

0

据我所知,这不是一种方法。把它的定义放在cpp文件中,在使用它的方法的定义之上。如果您的所有方法定义内嵌在您的类中您必须将该函数的原型放在类定义上方的标头中,但定义仍可以位于cpp文件中。

10

如果函数是

  • 不是类的外必需的,并且,
  • 不需要访问类成员(或者也许是有道理的作为游离函数成员作为参数)

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