C++标头和命名空间

Raf*_*ssi 1 c++ namespaces

在我的教授告诉我们在大学和我在Stroustrup的书中读到的内容之间,我心里有些困惑.

  • 我们都知道C++ header基本上是声明的集合(在file.h中定义),它们可以包含例如类的集合.它们非常有用,因为它们为我们提供了存储在单个空间中的许多功能

  • 命名空间是为了在不定义类型的情况下在程序的一部分中组织类,函数,类型(...)而发明的.

当我必须创建一个项目时,我无法看到具体的区别.


如果我(例如)制作一个解决不同程度方程的程序,我会把我需要的类放在一个文件中.例如,我将放置equations.h所有这些东西:class secondDeg,class thirdDeg,class fourthDeg等等.

那我为什么要使用命名空间呢?

答案(我猜)是:因为你可以给一个更好的组织命名(参见std :: cin).但在这种情况下我应该

  1. 创建equation.h(或其他)
  2. 创建一个名为命名空间eq,例如
  3. 将我的类放在命名空间中

这真的是必须的吗?我不能只使用头文件并将我的所有类放在里面吗?

art*_*rtm 7

那我为什么要使用命名空间呢?

命名空间可以包含多个标题,例如,namespace std包含来自<vector> <list>等的定义.

您可以定义自己namespace的不污染全局命名空间并避免冲突.最好将命名空间限制为所需的最小值,因此using namespace std;通常可以避免.


πάν*_*ῥεῖ 6

这真的是必须的吗?

这取决于.更好,更明确的选择是将您的声明嵌入到namespace.

我不能只使用头文件并将我的所有类放在里面吗?

当然可以,只是避免与global(::)范围中声明的符号发生任何冲突,并避免using namespace <xxx>;在头文件中.