现在我根本不使用头文件。类完全位于单个.cpp
文件中。但是为了节省编译时间,我现在想要使用头文件。我希望Visual Studio不会编译那些未针对调试版本进行修改的类。
有没有办法在头文件中仅提及公共方法和成员。从理论上讲,这将是编译器的足够信息。如果另一个文件,比如main.cpp
包含类标题,则不需要私有方法和成员,是吗?
如何在不重新输入私有方法和成员名称的情况下使用头文件?我想要的原因是编码效率。当我想要为另一个方法使用的类添加一个小帮助函数时,我不想也必须将它的签名添加到头文件中。
答案 0 :(得分:11)
如果另一个文件,比如main.cpp包含类头,则不需要私有方法和成员,是吗?
不,public
方法和成员不一定足够。例如,如果另一个.cpp
文件尝试创建您的类的实例:
SomeClass instance;
编译器需要知道为SomeClass
分配多少内存。为此,它需要完全了解SomeClass
的私人数据成员。
你构思这个问题的方式听起来好像你打算用语言来对抗。我认为这不是一个很好的方法。我认为最好的办法就是按照你选择的语言做事情,并且只有在有特定的,明确理解的需要时才会离开。
通常在C ++中完成的方式是整个类声明放在头文件中,并且定义在某种程度上分割在头文件和相应的.cpp
之间文件。确切的划分由各种技术考虑决定。例如,模板和内联函数通常必须出现在头文件中。另一方面,将代码放在头文件中会增加依赖性并可能构建时间。
有很多方法可以解决这些问题。然而,由于这涉及额外的复杂性,我认为只有在有明确需要的情况下才能做到这一点。
答案 1 :(得分:4)
所有函数声明应该放在头文件中,所有函数 definitions 应该放在cpp文件中。将声明放在cpp文件中是不好的编码实践。
当您编写模板或内联函数时,您可以将定义放在标题中。
一旦在头文件中声明了类,你必须在头部的类声明中声明它的所有方法和成员,因为你的类不再在cpp文件中声明
答案 2 :(得分:3)
我不知道如何做你要问的方法,但还有另一种方法可以让你有些孤立。您可能需要查看pimpl idiom,因为它提供了有关私人信息的隔离。这是一些额外的工作,但它非常有用,特别是在大型项目中。