📄 namespace.html
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="css/stdlayout.css" type="text/css">
<link rel="stylesheet" href="css/print.css" type="text/css">
<meta content="text/html; charset=gb2312" http-equiv="content-type">
<title>名称空间(Namespace)</title>
</head>
<body>
<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="CppGossip.html">C++
Gossip: 名称空间(Namespace)</a></h1>
随着程式码撰写越来越多,程式内容越来越大,您会发现管理程式中的变数名称、函式名称、类别名称也会是一件麻烦的事,尤其是一些同名问题的发生,例如在程
式中,您也许会定义一个Point类别代表2维空间的点,也许在程式的某个地方,您也会定义一个Point类别来表示一个3维空间的点,其它像函式同名、
共用变数同名的情况也可能发生,当这种情况发生时,其中一个定义就可能将另一个定义给覆写掉了。 <br>
<br>
C++提供名称空间的概念,它就像是一个管理容器,可以将您所定义的名称区域在名称空间之下,而不会有相互冲突的发生,例如您定义了一个
dimension2d与dimension3d的名称空间,在它们之下都有一个Point类别,但由于属于不同的名称空间,所以这两个名称并不会有所冲
突。 <br>
<br>
C++使用"namespace"关键字来定义一个名称空间,其语法如下所示: <br>
<div style="margin-left: 40px;"><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">namespace 名称
{ </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;">
// 类别、函式或变数宣告 </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;">};</span><br>
</div>
<br>
一个例子如下所示: <br>
<ul>
<li>Point2D.h</li>
</ul>
<pre>namespace d2d { <br> int i, j, k; <br><br> class Point2D {<br> public: <br> Point2D() {<br> _x = 0; <br> _y = 0;<br> } <br> <br> Point2D(int x, int y) : _x(x), _y(y) {<br> }<br> <br> int x() {return _x;} <br> int y() {return _y;} <br> <br> private:<br> int _x;<br> int _y; <br> }; <br>};</pre>
<br>
在名称空间中的成员,可以直接使用当中所宣告的识别字,但如果您要在名称空间之外使用这些成员,则要使用范围解析运算子::,例如d2d::
Point2D,您要指明要使用哪一个名称空间下的哪个类别,下面这个程式提供一个简单的示范: <br>
<ul>
<li>main.cpp</li>
</ul>
<pre>#include <iostream> <br>#include "Point.h"<br>using namespace std; <br><br>int main() {<br> d2d::Point2D p1(10, 10); <br><br> cout << "(x , y) : (" <br> << p1.x() << ", " <br> << p1.y() << ")"<br> << endl; <br> <br> return 0; <br>} </pre>
<br>
<span class="postbody">
执行结果:</span><br>
<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="background-color: rgb(0, 0, 0);"><small><span style="color: rgb(255, 255, 255);">(x , y) : (10, 10)</span></small><span style="color: rgb(255, 255, 255);"><br>
</span></td>
</tr>
</tbody>
</table>
<br>
当然每次若都要使用范围解析运算子来指明使用哪个名称空间下的成员,也是相当麻烦,您可以使用"using"关键字指明所要使用的名称空间或其下的成员,
则被指定的名称空间或其下的成员就可以直接被使用,"using"有两种用法,如下所示: <br>
<div style="margin-left: 40px;"><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">using
名称空间::成员 </span><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">
<span style="font-weight: bold; font-family: Courier New,Courier,monospace;">using
namespace 名称空间</span><br>
</div>
<br>
一个例子如下所示:<br>
<ul>
<li>main.cpp</li>
</ul>
<pre>#include <iostream> <br>#include "Point.h"<br>using namespace std; <br>using d2d::Point2D; <br><br>int main() { <br> Point2D p1(10, 10); <br><br> cout << "(x , y) : (" <br> << p1.x() << ", " <br> << p1.y() << ")"<br> << endl; <br> <br> return 0; <br>} </pre>
<br>
这个程式的执行结果与上一个相同;如果您确定将使用某个名称空间下的所有类别,则可以使用第二种方式来指定名称空间,例如:<br>
<ul>
<li>main.cpp</li>
</ul>
<pre>#include <iostream> <br>#include "Point.h"<br>using namespace std;<br>using namespace d2d; <br><br>int main() {<br> Point2D p1(10, 10); <br><br> cout << "(x , y) : (" <br> << p1.x() << ", " <br> << p1.y() << ")"<br> << endl; <br><br> return 0; <br>}<br></pre>
<br>
C++的标准函式库皆定义在std名称空间中,这也就是为什么每次在撰写程式时,总会在档案的最前头加上using namespace std;的原因。 <br>
<br>
您还可以定义一种未命名的名称空间,这可以建立唯一的识别字,只允许您在同一个档案中使用这些识别字,例如:<br>
<br>
<pre>namespace { <br> int i, j, k; <br><br> class Point2D {<br> public: <br> Point2D() {<br> _x = 0; <br> _y = 0;<br> } <br> <br> Point2D(int x, int y) : _x(x), _y(y) {<br> }<br> <br> int x() {return _x;} <br> int y() {return _y;} <br> <br> private:<br> int _x;<br> int _y; <br> }; <br>};</pre>
<br>
如果在档案中如上宣告,则i, j, k, Point2D等都只限于该档案中使用,在其它档案中就无法使用这些识别字。<br>
<br>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -