2011-01-25 64 views
6

Java中,有所謂的packageC++中的library是否代表相同的含義,特別是在涉及相關類和使用受保護成員的例子中?Java包與C++庫

謝謝。

+0

不幸的是我不知道C#庫是如何工作的,但是受保護的成員確實可以從包中看到,並且每個包爲類名定義了一個單獨的名稱空間,如果這就是您的意思。 – biziclop 2011-01-25 11:19:33

回答

10

有一個什麼樣的package意味着在Java中不同的尺寸。作爲區分內部類名稱和其他包中類名稱的容器,其等價物將是C++ namespaces

如,保證在同一個塊訪問非私有成員的類的一個單元,有在C++中沒有等價物。授予某個類的訪問級別獨立於定義該類的名稱空間。

如盤訂購你的源代碼的一種方式,沒有等價的,C++語言對代碼是如何存儲在文件中沒有要求。

關於C++庫,更接近Java中jar文件。它們將不同的類分享一些關係。一個jar可以包含多個包,並且多個jar可以包含來自同一個包的類。與庫類似,它們可以包含來自不同名稱空間的類和/或不同庫可以包含來自相同名稱空間的類。

2

嚴格地說,我認爲C++中的名稱空間提供了相同的語義。

7

最接近的Java包在C++ namespaces

它們可以嵌套到彼此,你需要明確聲明,您是using他們或他們的內容的一部分。但是,它們不像Java軟件包那樣強制執行任何物理文件層次結構。

1

我想它與C++中的命名空間更相關。 Java和C++都使用庫。庫可以是任何獨立的一組類[可能是一個框架],可以在我們的代碼中訪問。

0

外部庫存在Java和C++。只是格式各不相同,Java中的.jar和C++中的.dll/.so。

包和名稱空間的用途與庫不同。通過允許用戶對源代碼進行邏輯分組,避免用盡名稱。

0

Java中的package是類,接口和枚舉的命名空間。包名稱,一個點和類名形成一類的完全合格的類名

com.example.hello.HelloWorldApplication 
^--packagename--^ ^-----classname-----^ 

包名稱中的點有不同的含義,則名稱之間的點:這個例子中的前兩個點是部分包名,最後一個是分隔符。

應該牢記這一點,因爲關於軟件包名稱有一個常見的誤解:僅僅因爲名稱可以映射到分層文件夾結構,有些人認爲軟件包名稱也具​​有層次結構 - 情況並非如此: hello不是example的「子包」!

但是,創建一個簡單的映射文件夾和文件,一個類加載器可以簡單地採取完全合格類名,以斜線替換所有點和追加.class得到一個類文件的相對路徑。

但是請注意,不需要文件夾/文件映射t加載類 - 我們可以創建一個從數據庫或遠程服務中獲取類的類加載器 - 文件夾/文件映射不會有任何意義那種情況。