成员函数定义

时间:2011-01-29 14:04:45

标签: c++ class function definition member

采取什么方法:

定义成员(类)函数里面类?

定义成员(类)函数外部类?

感谢。

6 个答案:

答案 0 :(得分:9)

假设您正在谈论这三种可能性:

  1. 头文件中类定义中定义的方法。
  2. 方法在头文件中定义外部类定义。
  3. 方法在实现文件中定义外部类定义。
  4. 然后项目和公司指南可能会强迫您始终使用(1)或(3)。

    当你有一个选择时,恕我直言最好适应当前的情况,考虑诸如

    之类的事情
    • 您想要一个仅限标题的模块吗?然后(1)默认,(2)可能。
    • 这个方法是一个大野兽吗?然后是(2)或(3)。
    • 模板方法专业化?然后是(2)或(3)。
    • 存在构建时问题(慢速构建)?表示(3)。
    • 模板类? (1)或可能(2)

    但除非有效地强加于您的选择,否则请考虑代码的清晰度

    干杯&第h。,

答案 1 :(得分:2)

除非成员函数定义是微不足道的(在非正式意义上)并且不引入任何其他依赖项,否则我通常会在单独的源文件中定义类主体之外的成员函数。

这通常是一种风格问题,但在某些情况下,有必要和许多其他情况需要在课堂体外定义功能。

例如,在您具有相互依赖的类并且在类定义之前只能使另一个类的前向声明可用的情况下,使用该另一个类的定义的成员函数只能在该类之外定义在提供了另一个类的完整定义之后的正文。

答案 2 :(得分:2)

一个常见的建议是尽可能保持标题简洁。标题将包含在外部代码中,并且必须处理您在那里编写的所有内容。如果在头文件中编写方法,则所有翻译单元都将编译该函数,只是为了使链接器稍后可以丢弃其中的所有函数。

如果您的代码对不属于您的接口的类型或库具有内部依赖性,那么通过在类声明中内联成员函数的代码,该类的定义或该库的头将必须包含在标题中,这意味着您正在向用户泄露实施细节。

答案 3 :(得分:1)

你的意思是“在类声明/ .h文件中”和“在.cpp文件中使用::”吗?

如果是这样,我总是选择后者。在调试方面,可以更轻松地逐步查看正在进行的操作。它还有助于整理类声明,它不需要知道任何实现细节“

答案 4 :(得分:1)

如果要在类中定义函数,最基本的语法通常如下所示:

class Object
{
  int property;
  void doSomething()
  {
      property=100;
  }
};

如果要在外部定义函数,则类似于在main文件和库文件之前声明函数。在你的班上你有:

class Object
{
  int property;
  void doSomething();
};

然后在你的课后的某个地方,在main()函数之后或在包含的文件中,你可以得到这样的定义:

void Object::doSomething()
{
  property=100;
}

头文件中的某些位置类以及该标头使用的cpp文件中的定义。各种技术可能。

这两种方法都是有效的。通常我会在类和其他函数中直接包含非常小的和/或核心类功能,这些函数会执行我倾向于分离的较重的批量工作。试着想一想你的代码是否存在差异并希望改变它。

答案 5 :(得分:0)

如果我们根据性能问题看到它比在类中声明函数更有效的方法。因为在编译时它会汇集所有函数调用和其他组件,所以它很容易,并且必须更快才能将所有函数放在一个源代码中...