c++中namespace的用法

来源:互联网 发布:淘宝店铺不存在 退货 编辑:程序博客网 时间:2024/06/04 20:07

首先,在了解namespace的用法前,我们需要了解下为什么程序中要用到namespace.看以下的代码:

//a1.h#ifndef A1_H#define A1_Husing namespace std;class A{//定义了类Apublic:    void fun(){//类的成员函数fun    }};#endif // A1_H//a2.h#ifndef A2_H#define A2_Husing namespace std;class A{//也定义了一个Apublic:    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_Husing namespace std;namespace A1 {//在a1.h中定义了一个命名空间A1class A{//在命名空间A1中申明类Apublic:    void fun(){    }};}#endif // A1_H//a2.h#ifndef A2_H#define A2_Husing namespace std;namespace A2 {//在a2.h中定义了命名空间A2class A{//在空间A2中申明了一个与a1.h中的同名           类Apublic:    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就很好的避免了因为不同文件中的重名变量而导致的错误.

0 0
原创粉丝点击