您的位置:首页 > 编程语言 > C语言/C++

c++中namespace的用法

2017-03-20 18:35 393 查看
首先,在了解namespace的用法前,我们需要了解下为什么程序中要用到namespace.看以下的代码:

//a1.h
#ifndef A1_H
#define A1_H
using namespace std;
class A{//定义了类A
public:
void fun(){//类的成员函数fun

}
};

#endif // A1_H
//a2.h
#ifndef A2_H
#define A2_H
using namespace std;
class A{//也定义了一个A
public:
void fun1(){//定义了它的成员函数fun1

}
};

#endif // A2_H
//main.cpp
#include <iostream>
#include"a1.h"
#include"a2.h"
using namespace std;
int main(int argc, char *argv[])
{
A a;
cout << "Hello World!" << endl;
return 0;
}


可以看到,在a1.h和a2.h中我们定义了相同名称的类(实际情况中相同名字的类的成员不一定相同),在主程序中我们又同时包含了这两个头文件,在执行的时候就会发现,编译器报错.重复定义了A

如果这两个类的作用不同但是名称相同,又不能随意改动其中任何一个的名字时,我们该怎么办?这时候我们就需要用到了namespace

命名空间(namespace):实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。

打个比方,计科1班有个人叫小明,二班也有个人叫小明,把班级比作不同的头文件a1.h和a2.h,则这两个班的小明就是头文件中同名的变量或者类.如果老师需要叫其中一个小明怎么办呢?很简单,只要在小明前加上他的班级就行了,也就是1班的小明或者2班的小明.所以我们使用namespace时也是一样的.

以下的代码显示了如何使用namespace:

//a1.h
#ifndef A1_H
#define A1_H
using namespace std;
namespace A1 {//在a1.h中定义了一个命名空间A1
class A{//在命名空间A1中申明类A
public:
void fun(){

}
};
}
#endif // A1_H

//a2.h
#ifndef A2_H
#define A2_H
using namespace std;
namespace A2 {//在a2.h中定义了命名空间A2
class A{//在空间A2中申明了一个与a1.h中的同名
类A
public:
void fun1(){

}
};

}

#endif // A2_H
//main.cpp
#include <iostream>
#include"a1.h"
#include"a2.h"
using namespace std;
int main(int argc, char *argv[])
{
A1::A a;//用命名空间A1中声明的A类定义a
cout << "Hello World!" << endl;
return 0;
}


此时,再执行程序就编译器就不会报错了.

由此可见,namespace其实是拓展了程序的容错性,尤其是在多人合作写程序时,难免每人的程序段中出现同名的变亮,此时namespace就很好的避免了因为不同文件中的重名变量而导致的错误.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 namespace