【发布时间】:2014-06-06 20:55:30
【问题描述】:
我开始使用 C++ 进行面向对象编程,并且遇到过静态成员变量。
在我的特定情况下,我的头文件 (Class.hpp) 中有以下内容:
private:
const static string DEFAULT_PATH;
static string path;
这并不重要,但与任何示例一样有效。
因此,要进行正确的初始化,我必须进行一些研究,发现这不能在类主体中完成,而必须在源 (Class.cpp) 文件中完成。在我的源文件中,我添加了:
const string Class::DEFAULT_PATH = "./";
string Class::path = DEFAULT_PATH;
我发现这是违反直觉的,但我试图处理它。然后我想知道:
编译器究竟何时调用了这个初始化代码?我怎么能假设这个字段什么时候有值?我不太明白那里发生了什么,我想知道。
对我来说最有趣的是:当包含 class.hpp 时,我可以在 Class.cpp 中看到哪些符号?为什么这些声明在类主体之外和另一个文件中?
【问题讨论】:
-
在
main之前初始化。在此之前不要指望任何订单。并且 定义 必须放在 .cpp 中,这样您就不会违反单一定义规则。 -
编译器看到.cpp文件,include
被预处理器在.cpp文件中替换为.h文件内容。 -
@KerrekSB 好吧,我今天的目标是学习使用类并在 C++ 中进行 OO 编程,尽管看起来很奇怪。我可以说只是出于学习目的。
标签: c++