1. 程式人生 > >【C++】C++名稱空間(名字空間)

【C++】C++名稱空間(名字空間)

例如小李和小韓都參與了一個檔案管理系統的開發,它們都定義了一個全域性變數 fp,用來指明當前開啟的檔案,將他們的程式碼整合在一起編譯時,很明顯編譯器會提示 fp 重複定義(Redefinition)錯誤。

::是一個新符號,稱為域解析操作符,在C++中用來指明要使用的名稱空間。

除了直接使用域解析操作符,還可以採用 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。

參考程式(有改動和註釋)

#include <stdio.h>

//將類定義在名稱空間中
namespace wanglei{
	class Student{
	public:
		char *name;
		int age;
		float score;

	public:
		void say(){
			printf("%s的年齡是 %d,成績是 %f\n", name, age, score);
		}
	};
}


namespace BeiJing{
	class Student{
	public:
		char *name;
		int age;
		float score;

	public:
		void say(){
			printf("%s的黨齡是 %d,成績是 %f\n", name, age, score);
		}
	};
}

int main(){
	wanglei::Student stu1;
	stu1.name = "小明";
	stu1.age = 15;
	stu1.score = 92.5f;
	stu1.say();



	BeiJing::Student stu2;		//只能寫成  BeiJing::Student 或者  wanglei::Student,不能寫成 BeiJing::Student stu1;
	//否則在同一個main函式裡出現兩個stu1  是重定義redefinition
	stu2.name = "小紅";
	stu2.age = 15;
	stu2.score = 92.5f;
	stu2.say();


	return 0;
}