使用命名空间解决名字冲突

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

在程序设计中,难免会有一个页面包含多个其他页面的情况。当包含不同的页面是,不同的页面就有可能出现同名的类或者变量等,但显然他们在不同的页面中的作用是不同的,当包含到同一个页面的时候,就会出现重复定义的错误。这种情况可以使用命名空间来结果:

demo:

header1.h

#include<cstring>
#include<cmath>
using namespace std;
namespace ns1		//声明命名空间1 
{
	class Student
	{
		public:
			Student(int n,string nam,int a)
			{
				num=n;
				name=nam;
				age=a;
			}
			void get_data();
		private:
			int num;
			string name;
			int age;
	};
	void Student::get_data()	//在类外定义函数体 
	{
		cout<<num<<" "<<name<<" "<<age<<endl; 
	}
	double fun(double a,double b)
	{
		return sqrt(a+b);
	} 
}

header2.h

#include<cstring>
#include<cmath>
using namespace std;
namespace ns2
{
	class Student
	{
		public:
			Student(int n,string nam,string s)
			{
				num=n;
				name=nam;
				sex=s;
			}
			void get_data();
		private:
			int num;
			string name;
			string sex;
	};
	void Student::get_data()
	{
		cout<<num<<" "<<name<<" "<<sex<<endl; 
	}
	double fun(double a,double b)
	{
		return sqrt(a-b);
	}
}

main.cpp

#include<iostream>
#include"header1.h" 
#include"header2.h" 
using namespace std;
int main()
{
	ns1::Student stud1(101,"Wang",18);
	stud1.get_data();
	cout<<ns1::fun(3,5)<<endl;
	cout<<"\n=====================孤单寂寞冷的分割线飞过=============================="<<endl;
	ns2::Student stud2(102,"li","f"); 
	stud2.get_data();
	cout<<ns2::fun(5,3)<<endl;
	return 0; 
}


输出结果:

/*
	101 Wang 18
	2.82843
	
	=====================孤单寂寞冷的分割线飞过===========================
	102 li f
	1.41421
*/

分析:分别在header1.h和header2.h中建立了两个命名空间ns1和ns2,将原来在两个头文件中声明的类分别放在命名空间ns1个ns2中。注意:在头文件中,不要把#include命令放在命名空间中,因为命名空间中的内容不包括命令行,否则编译会出错。

两个Student和fun分别放在不同的命名空间中,各自有其作用域,互不相干。由于作用域不相同,不会产生名字冲突。正如同在两个不同的类中可以有同名的变量和函数而不会产生冲突一样。在使用时,我们只需要在用ns1::Student(命名空间ns1中的Student)来定义stud1,用ns2::Student(命名空间ns2中的Student)来定义stud2。显然,ns1::Student和ns2::Student是两个不同的类,不会发生冲突。

转载于:https://www.cnblogs.com/zhezh/p/3773364.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值