当前位置:  开发笔记 > 编程语言 > 正文

C ++将类添加到名称空间:为什么?

如何解决《C++将类添加到名称空间:为什么?》经验,为你挑选了1个好方法。

我是C ++的新手。为什么在Eclipse(用MinGW配置)中以及在其他线程中,为什么我注意到是用来将类添加到名称空间的?

我提供一个示例来向您展示我的实际疑问:

#ifndef MODEL_MANGO_HPP_
#define MODEL_MANGO_HPP_

namespace std {

class Mango {
public:
    Mango();
    virtual ~Mango();
};

} /* namespace std */

#endif /* MODEL_MANGO_HPP_ */

编辑:如注释所示,完全禁止将类添加到命名空间std。引用@owacoder,

命名空间永远不会关闭,因此您始终可以向它们添加类定义。但是,根据规范,std名称空间应视为封闭的。

为了向您提供上下文的完整视图,这是Eclipse为我完成的Mango.cpp的默认实现:

#include "Mango.hpp"
namespace std {
Mango::Mango() {
    // TODO Auto-generated constructor stub
}
Mango::~Mango() {
    // TODO Auto-generated destructor stub
}
} /* namespace std */

所以我的问题变成: 为什么使用“命名空间std {...}”,什么时候将类添加到命名空间是一种好习惯?



1> ForeverStude..:

您必须了解什么是类和名称空间的基础知识。

类(以及struct,enum和enum类)用于在C ++中定义用户定义的类型。

您创建一个类来表示逻辑实体并封装详细信息等。

名称空间是一种标记代码区域和限定变量唯一名称的方法。

如果您只是在文件中编写一个类,则该类将被写在“全局名称空间”中,因为您正在“污染名称空间”,因此不被认为是一种好习惯。

相反,您应该使用名称空间来限制变量名具有含义的范围。这样,您不会很快耗尽所有明智的类和变量名(您想编写“实用程序”类多少次了?)

namespace firstNamespace{
int x=2;
}

namespace secondNamespace{
int x=7;
}

int main () 
{
std::cout << firstNamespace::x << '\n';
std::cout << secondNamespace::x << '\n';
return 0;
}

在这种情况下,您可以看到我们可以通过限定名称空间在不同的上下文中“重用”变量名x。在名称空间块中,我们可以有更多的声明和定义。包括函数,类,结构等

不要以为命名空间保持打开状态,以后可以添加它们。例如,您可以拥有:

namespace firstNamespace{
int x=2;
}

namespace secondNamespace{
int x=7;
}

namespace firstNamespace{
int y=11;
}

在这里,我们添加了firstNamespace :: y。

更重要的是,您可以观察到std是C ++提供的名称空间,其中包含许多有用的变量,类型为std :: ostream的cout之类的对象,函数以及诸如std :: vector,std :: ostream之类的类,等等。

因此,回到您的问题,您要将类定义包装在名称空间中的原因是不污染全局名称空间。

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有