命名空间namespace是用来组织和重用代码的编译单元,通过命名空间来避免冲突,解决重名现象
namespace mynamespace {
// 命名空间中的代码块
}
命名空间属于作用域,作用域“{}”后边不需要加分号,比如struct是一个定义域,定义域“{}”后边需要加分号
命名空间的别名:
namespace n1 = mynamespace;
C++命名空间是一种将标识符封装在命名区域中的机制,以避免与其他标识符发生冲突,
以及提高代码的可读性和可维护性。命名空间可以定义在任何C++程序的范围内,
包括全局作用域、函数内、类定义内等等。
在命名空间中定义的变量、函数、类等的名字前需要加上命名空间的名称,
以隔离到其他命名空间的同名或全局作用域中的标识符。
// C++命名空间是一种将标识符封装在命名区域中的机制,以避免与其他标识符发生冲突,
// 以及提高代码的可读性和可维护性。
// 命名空间可以定义在任何C++程序的范围内,
// 包括全局作用域、函数内、类定义内等等。
// 在命名空间中定义的变量、函数、类等的名字前需要加上命名空间的名称,
// 以隔离到其他命名空间的同名或全局作用域中的标识符。
#include <iostream>
namespace myCode {
int add(int a, int b) {
return a + b;
}
}
namespace otherCode {
int add(int a, int b) {
return a * b;
}
}
int main()
{
std::cout << myCode::add(4, 5) << std::endl;
std::cout << otherCode::add(4, 5) << std::endl;
return 0;
}
// 上述代码中,`mycode::add`和`otherCode::add`两个函数的名称相同,
// 但它们包含在不同的命名空间中,因此不会发生命名冲突。
// 另外,也可以使用`using namespace`指令来使用命名空间中的标识符
// 需要注意的是,过度使用命名空间可能会降低代码的可读性和可维护性,
// 因此应该合理使用命名空间,并始终使用唯一性的名称。
#if 0
#include <iostream>
using namespace std;
namespace mycode {
int add(int a, int b) {
return a + b;
}
}
int main()
{
cout << mycode::add(4, 5) << endl;
return 0;
}
#endif
命名空间(namespace)和类(class)都是C++的重要特性,但二者的作用和用法各有不同。
命名空间是将一组标识符封装到一个逻辑组内的机制,它可以帮助我们防止不同代码段之间出现命名冲突,以达到目标代码间的无缝合作和互相协作。命名空间不是程序的一部分,它们通常定义在头文件中,有助于避免名称冲突。
类也是一种封装机制,用于将变量及函数一起封装成一个实体,其提供了数据抽象和封装的机制,实现了面向对象所倡导的 encapsulation、inheritance和polymorphism等重要特性。类定义是一个完整的代码段,包含类的成员变量和成员函数等。
二者的区别主要在于其作用和用法:
1. 命名空间主要用于封装标识和将其隔离开来,而类主要用于封装数据和方法,并以面向对象编程的方式来进行数据抽象和封装。
2. 命名空间可以在任何代码段中使用,不需要依赖其他的机制,而类必须定义在类的作用域内,而且必须依赖类的实例来进行访问。
3. 命名空间使用namespace关键字进行定义,类使用class关键字进行定义。
4. 在命名空间中,可以使用多个命名空间,以及在命名空间之外定义其他的函数、对象等,使得不同名称可以共存;而在类中,成员函数和成员变量均为类的成员,必须遵循类的规则和限制。
总之,虽然命名空间和类都是C++的重要特性,但这两者的作用和用法完全不同,各自具有其独特的特点和优势,开发者需要根据实际代码要求来选择使用适当的特性。