命名空间和类有啥区别? [关闭]

Posted

技术标签:

【中文标题】命名空间和类有啥区别? [关闭]【英文标题】:What's the difference between namespaces & classes? [closed]命名空间和类有什么区别? [关闭] 【发布时间】:2014-09-18 13:12:05 【问题描述】:

在C++13/4环境下,命名空间和类有什么区别?

我的看法;

namespace foo

    int a : 4;
    int b : 4;

class bar

    public:
        int a = 0;
        int b = 0;

是一样的……

是的,它们的访问方式不同;

命名空间....

foo::a=20;
foo::b=30;

类....

bar alpha;
alpha.a ...
alpha.b ...

但总的来说,一个比另一个有什么优势?

【问题讨论】:

类应该用于抽象、封装和/或 OOP。命名空间应该用于分组。 去任何地方寻找答案。您不需要自定义答案。 您的第一个代码甚至无效。 一个更好的问题是,“使用静态类成员与在命名空间范围内使用变量的优缺点是什么?” WTF 是 C++13??? 【参考方案1】:

命名空间允许您将实体分组为具有本地范围而不是全局范围。这在标准库中很常见,例如std

名称的示例组可能是coutcin 等流。

不使用命名空间,你必须定义命名空间范围std

std::cout << "Hello, world!";

使用命名空间,您已经显示了一次范围,不再需要再次声明它。

using namespace std;
cout << "Hello, world!";

但是,在后一种情况下,您不能使用另一个名为 cout 的变量,该变量是用户定义的或包含在另一个库中。

【讨论】:

答案有点不对劲,至少对我来说是这样。它总是使用命名空间。无论您做什么,cout 都存在于 std 中。 using namespace std; 还使 cout 在它使用的范围内可用,您可能暗示它是全局范围。之后仍然可以通过std::cout 访问它。一旦您将coutstd 提升到该语句所在的任何范围内,您仍然可以拥有另一个cout,只要它也不在该范围内。例如,库使用自己的命名空间,或者如果这是在函数中,则放入像 int cout; 这样的块。 明确地说,我可以说'通过声明命名空间,您已经显示了一次范围,不再需要再次声明它。我应该说声明范围而不是定义它。显然 cout 存在于 std 中 - 我的回答同意这一点。【参考方案2】:

有很多不同之处。命名空间是名称的分组机制,仅此而已。另一方面,类:

是类型。 可以实例化。 可以派生自。 可以有公共、受保护和私有成员。 可以有虚函数。

等等。

如果您发现自己想知道应该使用命名空间还是类,那么您可能只是在寻找一种控制名称范围的方法——所以选择很明确:使用命名空间。

【讨论】:

以上是关于命名空间和类有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

XSD:命名空间和默认命名空间有啥区别

django url中的实例命名空间和应用程序命名空间有啥区别?

类、包、命名空间和模块之间有啥区别?

类和命名空间是啥关系

在命名空间块中定义类方法和使用 :: 定义它们有啥区别

在 PHP 中导入类和命名空间:前导反斜杠有啥区别?