名稱空間(Namespace)
許多大的程式使用到Namespace,原因如下
隨著程式碼撰寫越來越多,程式內容越來越大,您會發現管理程式中的變數名稱、函式名稱、類別名稱也會是一件麻煩的事,尤其是一些同名問題的發生,例如在程 式中,您也許會定義一個Point類別代表2維空間的點,也許在程式的某個地方,您也會定義一個Point類別來表示一個3維空間的點,其它像函式同名、 共用變數同名的情況也可能發生,當這種情況發生時,其中一個定義就可能將另一個定義給覆寫掉了。
C++提供名稱空間的概念,它就像是一個管理容器,可以將您所定義的名稱區域在名稱空間之下,而不會有相互衝突的發生,例如您定義了一個 dimension2d與dimension3d的名稱空間,在它們之下都有一個Point類別,但由於屬於不同的名稱空間,所以這兩個名稱並不會有所衝突。
C++使用"namespace"關鍵字來定義一個名稱空間,其語法如下所示:
namespace 名稱 {
// 類別、函式或變數宣告
};
- Point2D.h
namespace d2d {
int i, j, k;
class Point2D {
public:
Point2D() {
_x = 0;
_y = 0;
}
Point2D(int x, int y) : _x(x), _y(y) {
}
int x() {return _x;}
int y() {return _y;}
private:
int _x;
int _y;
};
};
- main.cpp
#include "Point2D.h"
using namespace std;
int main() {
d2d::Point2D p1(10, 10);
cout << "(x , y) : ("
<< p1.x() << ", "
<< p1.y() << ")"
<< endl;
return 0;
}
另一個用法
- main.cpp
#include <iostream> #include "Point.h" using namespace std; using d2d::Point2D; int main() { Point2D p1(10, 10); cout << "(x , y) : (" << p1.x() << ", " << p1.y() << ")" << endl; return 0; }
另外如果有兩個檔案有定義相同的namespace,可以定義如下
namespace config{
extern int On;
extern int Off;
extern double S;
}
And in the source file:namespace config{
int On = 1;
int Off = 0; double S = 1.0; }如果兩個namespace內部定義不相同的變數,則為Extending namespaces (C++ only)參考如下
namespace X { // namespace definition
int a;
int b;
}
namespace X { // namespace extension
int c;
int d;
}
namespace Y { // equivalent to namespace X
int a;
int b;
int c;
int d;
}
參考網站
http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fextending_namespaces.htm
http://openhome.cc/Gossip/CppGossip/Namespace.html
沒有留言:
張貼留言