查缺补漏C++:命名空间

为了解决合作开发时的命名冲突问题,C++引入了命名空间(Namespace)的概念。

语法:

namespace name{
    //variables, functions, classes
}

name是命名空间的名字,它里面可以包含变量、函数、类、typedef、#define 等,最后由{ }包围。使用变量、函数时要指明它们所在的命名空间。

例如:
定义两个命名空间:

namespace Li{  //小李的变量定义
    FILE* fp = NULL;
}
namespace Han{  //小韩的变量定义
    FILE* fp = NULL;
}

 如何使用:

(1)使用域解析操作符::

Li::fp = fopen("one.txt", "r");  //使用小李定义的变量 fp
Han::fp = fopen("two.txt", "rb+");  //使用小韩定义的变量 fp

::是一个新符号,称为域解析操作符,在C++中用来指明要使用的命名空间。 

(2)使用using关键字声明

using Li::fp;
fp = fopen("one.txt", "r");  //使用小李定义的变量 fp
Han :: fp = fopen("two.txt", "rb+");  //使用小韩定义的变量 fp

在代码的开头用using声明了 Li::fp,它的意思是,using 声明以后的程序中如果出现了未指明命名空间的 fp,就使用 Li::fp;但是若要使用小韩定义的 fp,仍然需要 Han::fp。

        using 声明不仅可以针对命名空间中的一个变量,也可以用于声明整个命名空间,例如:

using namespace Li;
fp = fopen("one.txt", "r");  //使用小李定义的变量 fp
Han::fp = fopen("two.txt", "rb+");  //使用小韩定义的变量 fp

 如果命名空间 Li 中还定义了其他的变量,那么同样具有 fp 变量的效果。在 using 声明后,如果有未具体指定命名空间的变量产生了命名冲突,那么默认采用命名空间 Li 中的变量。

命名空间内部不仅可以声明或定义变量,对于其它能在命名空间以外声明或定义的名称,同样也都能在命名空间内部进行声明或定义,例如类、函数、typedef、#define 等都可以出现在命名空间中。

变量示例:
 

#include
#include
namespace Liu{
	int score=100;
}
namespace Li{
	int score=98;
}



int main()
{
	using Liu::score;
	printf("Liu'score:%d\n",score);
	printf("Li'score:%d\n",Li::score);
	return 0;
}

函数示例:

#include
#include
namespace Liu{
	void say(){
		std::cout<<"hello!"<

类示例:

#include
#include
namespace Diy{
	class Student{
		public:
			char* name;
			int age;
			float score;
			
		public:
			void say(){
				std::cout<<"姓名:"<

输出结果:

查缺补漏C++:命名空间_第1张图片

 

你可能感兴趣的:(#,C/C++语言学习,c++,蓝桥杯,开发语言)