类是数据类型。它们是结构的扩展概念,它们可以包含数据成员,但它们也可以包含作为成员的函数,而命名空间只是将项目组合在一起的一种抽象方式。 命名空间不能创建为对象; 更多地将其视为命名约定。它用作附加信息来区分不同库中具有相同名称的类似函数、类、变量等。 本质上,命名空间定义了一个范围。以下是一些需要证明的点:
1、命名空间是一种对标识符进行分组的方式,这样它们就不会发生冲突。使用类可以创建该类的实例。
2、可以对命名空间使用 using
声明,除非从它们派生类,否则这是不可能的。
3、可以重新打开命名空间并跨单元添加内容,但是不能用类来做到这一点。
例如:
namespace A {
int f1();
}
namespace A {
int f2();
}
上面写法是合法的,但是以下写法是非法的:
class A {
int f1();
};
class A { // illegal
int f2();
};
4、可以拥有未命名的命名空间,但不能拥有未命名的类。例如:
namespace { // fine
// some code....
}
class { // illegal
}
5、如果名称的长度使代码难以阅读,或者在无法使用 using
指令的头文件中键入繁琐,我们可以创建一个命名空间别名,然后作为实际名称的缩写。 例如:
#include <iostream>
namespace foo {
namespace bar {
namespace baz {
int qux = 42;
}
}
}
namespace fbz = foo::bar::baz;
int main()
{
std::cout << fbz::qux << '
';
}
运行结果:
42
在类的情况下,必须使用 typedef
,例如:
class Car {
public:
typedef std::vector<Wheel> WheelCollection;
WheelCollection wheels;
};
命名空间和类的区别
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:命名空间和类的区别
本文链接:https://www.vsdiffer.com/vs/difference-namespace-class.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。