如何使用命名空间和类?
Posted
技术标签:
【中文标题】如何使用命名空间和类?【英文标题】:How to use namespaces and classes? 【发布时间】:2017-04-16 18:55:14 【问题描述】:对不起,如果这是一个愚蠢的问题,但我正在学习 C++(我通常用 C 编写代码)并且我不明白如何使用命名空间和类。它们是否必须在头文件中声明?如何在命名空间中声明函数?假设我正在处理一个包含不同文件的大型项目。我在一个文件中定义了一个命名空间,但随后想向同一个命名空间添加更多函数,但这些函数是在另一个文件中定义的。可以这样做吗?例如:
file1.cpp
namespace Example
int vartest;
void foo();
file2.cpp
int othervar;
void otherfoo(); // How can I add this and othervar to the Example namespace?
谢谢!
【问题讨论】:
由于您是从 C 语言进来的,您可能会发现匿名命名空间是static
的有用替代品。 namespace bool Ireturntrue() return true;
现在被很好地隔离了,并且在链接时不会增加名称污染。
【参考方案1】:
只需将其声明为具有相同“名称”的等效1namespace
!
file1.cpp
namespace Example
int vartest;
void foo();
file2.cpp
namespace Example
int othervar;
void otherfoo();
命名空间被合并。
它们必须在头文件中声明吗?
没有。您可以在namespace
中声明任何namespace
。 (注意“全局作用域”也是namespace
)
如何在命名空间中声明函数?
只需在namespace
中声明即可。正如你所做的那样。
假设我正在处理一个包含不同文件的大型项目。 我在文件中定义了一个命名空间,但后来想添加更多 函数到同一个命名空间,但这些函数定义在 另一个文件。可以吗?
合并同一命名空间内的同名命名空间。
namespace X void foo()
namespace X void foo() //Error, redefinition of `foo` because the namespace ::X is merged
namespace X void foo()
namespace Y void foo() //Ok. Different name spaces...
namespace X void foo() // ::X
namespace Y void foo() // ::Y
namespace Y
namespace X // namespace ::Y::X here isn't same as ::X
void foo() //OK
1回想一下,所谓的“全局范围”实际上是一个命名空间,称为global namespace
【讨论】:
加 1 表示全局命名空间的最后一个注释。以上是关于如何使用命名空间和类?的主要内容,如果未能解决你的问题,请参考以下文章