如何使用名称空间和类?

时间:2017-04-16 18:55:14

标签: c++ namespaces

很抱歉,如果这是一个愚蠢的问题,但我正在学习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?

谢谢!

1 个答案:

答案 0 :(得分:4)

只需将其声明为同一“name”的等同 1 namespace

<强> 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的名称空间