作为类成员的函数的定义

时间:2015-02-28 12:08:21

标签: c++ function class private member

我有两个函数,它们是“Data”类的私有成员:

class Date
{
private:
    bool leapYear(int y);
    void fillDate(int d, Month m, int y);
};

那么,最好定义这个函数:

  • 在课堂定义中;
  • 在课外的头文件中;
  • 或“.cpp”文件?

3 个答案:

答案 0 :(得分:4)

你可以在这里选择。以下是一些想法:

  • 速度内联不再是一个问题,因为编译器现在擅长链接时优化。因此,性能不应该是决定因素(编译速度也很重要,但这是另一种蠕虫)。
  • 在类中定义的小内联成员函数可能是一种“记录”类所做内容的简单方法。此外,这往往会使实现本地化,这在阅读代码时很舒服。不过不要过分。
  • 大型函数原则上应该进入它们自己的文件,或者至少在类定义之外,因为它们没有充分理由使类定义代码混乱。模板代码也不例外。
  • Pimpl也有优点/缺点,但在这里我没有看到任何有理由在你的简单案例中介绍这些野兽。它们通常用于减少头文件之间的依赖关系。

这里,如果实现很小,你可以在类中内联编写代码。但是如果逻辑很复杂,你应该将它们放在自己的实现(“。cpp”)文件中。

您也可以开始内联,当代码已经解决了更复杂的问题时,请将实现移动到自己的文件中。

答案 1 :(得分:1)

我强烈建议您不要考虑选项2.这会让您感受到多重定义"如果将此文件包含在多个实现文件中,则链接器会出错,因为定义将(由预处理器)复制到每个.cpp文件中。

答案 2 :(得分:0)

我个人的理念是将所有函数定义放入实现(.cpp)文件中,因为,首先,它将声明(+文档)与定义相加,后者增加了代码清晰度IMO,其次,具有一个地方的所有定义(实现文件)使我更容易找到功能。根据我的经验,必须在头文件和实现文件之间切换,以查看我正在查找的这个特定函数是否在头文件中内联/定义,或者它是否在实现文件中,这总是非常麻烦。在实现文件中包含所有函数定义意味着我知道我将在该文件中找到任何函数的定义,并且不必浪费时间切换和查看。