我是否必须在类的头文件中提及私有方法?

时间:2013-04-06 09:25:23

标签: c++ class header-files

现在我根本不使用头文件。类完全位于单个.cpp文件中。但是为了节省编译时间,我现在想要使用头文件。我希望Visual Studio不会编译那些未针对调试版本进行修改的类。

有没有办法在头文件中仅提及公共方法和成员。从理论上讲,这将是编译器的足够信息。如果另一个文件,比如main.cpp包含类标题,则不需要私有方法和成员,是吗?

如何在不重新输入私有方法和成员名称的情况下使用头文件?我想要的原因是编码效率。当我想要为另一个方法使用的类添加一个小帮助函数时,我不想也必须将它的签名添加到头文件中。

3 个答案:

答案 0 :(得分:11)

  

如果另一个文件,比如main.cpp包含类头,则不需要私有方法和成员,是吗?

不,public方法和成员不一定足够。例如,如果另一个.cpp文件尝试创建您的类的实例:

SomeClass instance;

编译器需要知道为SomeClass分配多少内存。为此,它需要完全了解SomeClass的私人数据成员。

你构思这个问题的方式听起来好像你打算用语言来对抗。我认为这不是一个很好的方法。我认为最好的办法就是按照你选择的语言做事情,并且只有在有特定的,明确理解的需要时才会离开。

通常在C ++中完成的方式是整个类声明放在头文件中,并且定义在某种程度上分割在头文件和相应的.cpp之间文件。确切的划分由各种技术考虑决定。例如,模板和内联函数通常必须出现在头文件中。另一方面,将代码放在头文件中会增加依赖性并可能构建时间。

有很多方法可以解决这些问题。然而,由于这涉及额外的复杂性,我认为只有在有明确需要的情况下才能做到这一点。

答案 1 :(得分:4)

所有函数声明应该放在头文件中,所有函数 definitions 应该放在cpp文件中。将声明放在cpp文件中是不好的编码实践。

当您编写模板或内联函数时,您可以将定义放在标题中。

一旦在头文件中声明了类,你必须在头部的类声明中声明它的所有方法和成员,因为你的类不再在cpp文件中声明

答案 2 :(得分:3)

我不知道如何做你要问的方法,但还有另一种方法可以让你有些孤立。您可能需要查看pimpl idiom,因为它提供了有关私人信息的隔离。这是一些额外的工作,但它非常有用,特别是在大型项目中。