c++ - 我必须在类的头文件中提及私有(private)方法吗?

标签 c++ class header-files

现在我根本不使用头文件。每个类都完全在一个 .cpp 文件中。但是为了节省编译时间,我现在想使用头文件。我希望 Visual Studio 不会编译当时未针对调试版本修改的类。

有没有办法在头文件中只提及公共(public)方法和成员。从理论上讲,这对编译器来说已经足够了。如果另一个文件,例如 main.cpp 包含类头,则不需要私有(private)方法和成员,对吗?

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

最佳答案

If another file, say main.cpp includes the class header there is no need for private methods and members, is it?

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

SomeClass instance;

除其他外,编译器需要知道为 SomeClass 分配多少内存。为此,它需要充分了解 SomeClass 的私有(private)数据成员。

您提出问题的方式听起来好像您有意与语言作斗争。我认为这不是解决问题的好方法。我认为最好的方法是按照通常用您选择的语言做事的方式做事,并且只有在有特定的、明确理解的需求时才改变这种做法。

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

有多种方法可以解决这些问题。但是,由于这涉及额外的复杂性,我认为只有在有明确可识别的需求时才应该这样做。

关于c++ - 我必须在类的头文件中提及私有(private)方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15849176/

相关文章:

java - 如何在其他处理选项卡中使用 public class frome .java 文件?

c++ - 使包含多个类需要一个 header

c++ - 如何在Visual Studio 2017项目中引用头文件

c++ - 在 Qt5 中的多个弹出窗口小部件上接收鼠标 EnterEvent 和 LeaveEvent

链表中的 C++ 内存泄漏 (Valgrind)

java - 使用 class.forname().newInstance() 实例化类时出错

ios - 如何重用属性

c++ - #include <文件名> 和 #include "filename"之间有什么区别?

c++ - 图形到图形深度依赖性,深度缓冲区被破坏

Java 到 C++ 语法