C++命名空间namespace的使用

    C++ 除了使用标准命名空间 using namespace std,还可以使用自己命名的空间,其目的主要是限制变量或者函数的使用范围。在实际开发中,有时多个人难免会命名相同的函数名字,为了明确该函数使用范围,引进命名空间

其特性主要如下:

1-命名空间将全局作用域分成不同的部分,
2-不同命名空间中的标识符可以同名而不会发生冲突
3-命名空间可以发生嵌套
4-全局作用域也叫默认命名空间

测试代码:

     命名空间1 和命名空间2都包含同名函数和复数结构体的定义,

#pragma once
#include <iostream>
//命名空间1
 namespace spaceTest1
{
	 struct Complex {
		 int x;
		 int y;
	 };
	 void ComplexAdd(Complex a, Complex b, Complex* result);
	 void show();
}

 //命名空间2
 namespace spaceTest2
 {
	 struct Complex {
		 double x;
		 double y;
	 };
	 void ComplexAdd(Complex a, Complex b, Complex* result);
	 void show();
 }

 


void spaceTest1::ComplexAdd(spaceTest1::Complex a, spaceTest1::Complex b, spaceTest1::Complex* result) {
	Complex  temp;
	temp.x = a.x + b.x;
	temp.y = a.y + b.y;
	*result = temp;
}
void spaceTest1::show() {
	std::cout << "this is namespace [spaceTest1]" << std::endl;
}

void spaceTest2::ComplexAdd(spaceTest2::Complex a, spaceTest2::Complex b, spaceTest2::Complex* result) {
	Complex  temp;
	temp.x = a.x + b.x;
	temp.y = a.y + b.y;
	*result = temp;
}

void spaceTest2::show() {
	std::cout << "this is namespace [spaceTest2]" << std::endl;
}

 

#include <stdio.h>
#include "NameSpace.h"
using namespace spaceTest1;
//using namespace spaceTest2;
void test() {
	
	//隐式:根据声明的命名空间调用对应的函数
	show();

	Complex paramA, paramB, result;
	paramA.x = 4; paramA.y = 4;
	paramB.x = 8; paramB.y = 8;
	ComplexAdd(paramA, paramB, &result);
	std::cout << "ComplexAdd: " << result.x << "+" << result.y << "i" << endl;



	//显示调用,在函数或者类型前声明空间
	spaceTest1::Complex paramA0, paramB0, result0;
	paramA0.x = 3; paramA0.y = 3;
	paramB0.x = 7; paramB0.y = 7;
	spaceTest1::ComplexAdd(paramA0, paramB0, &result0);
	std::cout << "ComplexAdd: " << result0.x <<"+"<< result0.y<<"i"<< endl;

	spaceTest2::Complex paramA1, paramB1, result1;
	paramA1.x = 3.123; paramA1.y = 3.123;
	paramB1.x = 7.123; paramB1.y = 7.123;
	spaceTest2::ComplexAdd(paramA1, paramB1, &result1);
	std::cout << "ComplexAdd: " << result1.x<< "+"<< result1.y << "i" << endl;

}

结果:

    程序开始首先调用了show函数,由于声明了命名空间sapceTest1,编译知道应该调用spaceTest1下的show函数和CompleAdd函数。但一般情况下,我们习惯显式指明其所属命名空间:spaceTest1::ComplexAdd(paramA0, paramB0, &result0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值