命名空間(namespace) 友元函式

2022-07-31 05:39:12 字數 1283 閱讀 6198

17.2、命名空間

命名空間(namespace)為防止名字衝突提供了更加可控的機制。命名空間能夠劃分全域性命名空間,這樣使用獨立開發的庫更加容易了。乙個命名空間就是乙個作用域,通過在命名空間內部定義庫中的名字,庫的作者(以及使用者)可以避免全域性名字固有的限制。

1、命名空間的定義(以關鍵字namespace開始,後接命名空間的名字)

namespace

cplusplus_primer ;

sales_item

operator+(const sales_item&,

const sales_item&);

class

query ;

class query_base ;

}

這段**定義了名為cplusplus_primer的命名空間,它有四個成員:兩個類,乙個過載的+操作符,乙個函式。

命名空間可以在全域性作用域或者其他作用域內部定義,但不能在函式或者類內部定義。

命名空間內部可以放入:類,變數(以及它們的初始化),函式(以及它們的定義)、模板,以及其他命名空間。

命名空間中定義的名字可以被命名空間中的其他成員直接訪問,命名空間外部的**必須指出名字定義在哪個命名空間中。

從命名空間外部使用命名空間成員時,可以編寫using宣告:

using cplusplus_primer::query;

在這個using宣告之後,程式可以無需cplusplus_primer限定符而直接使用名字query。

2、命名空間可以是不連續的,與其他作用域不同,命名空間可以在幾個部分中定義。命名空間由它的分離定義部分的總和構成,命名空間是累積的。乙個命名空間的分離部分可以分散在多個檔案中,在不同文字檔案中的命名空間定義也是累積的。

命名空間可以不連續意味著,可以用分離的介面檔案和實現檔案構成命名空間,因此,可以用與管理自己的類和函式定義相同的方法來組織命名空間:

(1)定義類的命名空間成員,以及作為類介面的一部分的函式宣告與物件宣告,可以放在標頭檔案中,使用命名空間成員的檔案可以包含這些標頭檔案。

(2)命名空間成員的定義可以放在單獨的原始檔中。

[注]定義多個不相關型別的命名空間應該使用分離的檔案,表示該命名空間定義的每個型別。

如果在本類以外的其它地方定義了乙個函式(這個函式可以是不屬於任何類的非成員函式,也可以是其它類的成員函式),在類體中用friend對該函式進行宣告,此函式就稱為本類的友元函式。乙個類的友元函式可以訪問這個類中的private成員。

Namespace 命名空間

namespace 命名空間。命名空間是用來解決不同的類和函式擁有相同的名稱的問題。解決了命名衝突的問題。namespace gxg namespace gaoxiaoguang 使用方法 gxg a gxga gaoxiaoguang a gaoxiaoguanga gxg bfunction g...

命名空間namespace

對using namespace std 的解釋 所謂namespace,是指識別符號的各種可見範圍。c 標準程式庫中的所有識別符號都被定義於乙個名為std的namespace中。由於namespace的概念,使用c 標準程式庫的任何識別符號時,可以有三種選擇 1 直接指定識別符號。例如std os...

namespace 命名空間

在討論如何使用命名空間之前,必須了解 php 是如何知道要使用哪乙個命名空間中的元素的。可以將 php 命名空間與檔案系統作乙個簡單的模擬。在檔案系統中訪問乙個檔案有三種方式 相對檔名形式如foo.txt。它會被解析為 currentdirectory foo.txt,其中 currentdirec...