持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
在讲命名空间之前,首先要讲讲同名冲突
什么是同名冲突?
同名冲突简单来说就是在一个程序里面有两个或多个同名变量;
它们来自不同的文件中,在做项目的时候,文件汇总的时候可能会出现编译问题;
比如有两个Student类,编译器无法判断Student分别是哪个文件的;
这时就需要引入命名空间来解决这一问题
什么是命名空间?
命名空间是ANSI C++ 引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。
所谓命名空间,实际上就是一个由程序设计者命名的内存区域。
程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。
命名空间的限定:
对于在namespace ns1里的变量a和b
如果在主程序中要使用它们,则必须要这样使用:
ns1::a和ns1::b
像这样的用法就称为命名空间的限定
命名空间的作用
命名空间的作用其实就是建立一些相互区分开的作用域来把一些全局变量分开来,以免发生名字冲突~
测试实用性:
- 首先先创建一个头文件,这个头文件包含了一个fan函数、一个Student类以及Display函数
标头代码:
//头文件
#pragma once
#include<string>
#include<cmath>
#include<iostream>
using namespace std;
namespace ns1 {
class Student {
private:
int num;
string name;
int age;
public:
Student(int n, string nam, int a) {
num = n;
name = nam;
age = a;
}
void Display() {
cout << num << " " << name << " " << age << endl;
}
};
double fun(double a, double b) {
return sqrt(a + b);
}
}
复制代码
- 再创建一个头文件,这个头文件同样包含了一个fan函数、一个Student类以及Display函数
标头1代码:
#pragma once
#include<string>
#include<cmath>
using namespace std;
namespace ns2 {
class Student {
private:
int num;
string name;
char sex;
public:
Student(int n, string nam, char s) {
num = n;
name = nam;
sex = s;
}
void Display() {
cout << num << " " << name << " " << sex << endl;
}
};
double fun(double a, double b) {
return sqrt(a - b);
}
}
复制代码
- 最后,把这两个头文件同时连到主程序中,看看它们的使用:
主程序代码:
#include<iostream>
//将这两个头文件加入主cpp文件
#include"标头.h"
#include"标头1.h"
using namespace std;
int main()
{
//用ns1命名空间的Student类定义stu1
ns1::Student stu1(10001, "小明", 18);
//不能用ns1::stu1.Display();
stu1.Display();
//调用ns1的fun函数
cout << ns1::fun(6, 7) << endl << endl;
//用ns2命名空间的Student类定义stu2
ns2::Student stu2(10002, "小红", 'F');
//不能用ns2::stu2.Display();
stu2.Display();
//调用ns2的fun函数
cout << ns2::fun(9, 1) << endl;
cout << endl;
system("pause");
return 0;
}
复制代码
测试结果:
PS: 好了,大家该会命名空间的基本使用了~