2011-01-25 9 views
6

Javaには、packageという名前があります。 C++libraryは、特に関連するクラスを保持する例や保護されたメンバーの使用に関して、同じ意味を表していますか?JavaパッケージとC++ライブラリ

ありがとうございました。

+0

残念ながら、C#ライブラリの仕組みはわかりませんが、保護されたメンバーはパッケージ内から実際に見え、各パッケージはクラス名の別の名前空間を定義します。 @biziclop。 – biziclop

+0

私は実際にC#ではなくC#について質問しています。 – Simplicity

+0

@ user588855私は読むことさえできません。 :) – biziclop

答えて

10

packageがJavaで意味するものとは異なる次元があります。内部のクラスの名前を他のパッケージのクラスの名前と区別するコンテナとして、同等のものはC++ namespacesです。

同じブロック内のクラスに非プライベートメンバーへのアクセスを保証するユニットとして、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は、クラス、インタフェース、および列挙型の名前空間です。この例の最初の2つのドット:

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

パッケージ名のドットはその後、別の意味の名前の間にドットを持っている:パッケージ名は、ドットとクラス名は、クラスの完全修飾クラス名を形成しますパッケージ名の一部がのであり、最後はセパレータである。

パッケージ名にはよくある誤解があります。名前が階層的なフォルダ構造にマップされる可能性があるため、パッケージ名にも階層があります。 helloexampleの「サブパッケージ」ではありません!フォルダやファイルへの単純なマッピングを作成するための

しかし、クラスローダは単に、完全修飾クラス名を取るスラッシュですべてのドットを交換し、クラスファイルへの相対パスを取得するには.classを追加することができます。

フォルダ/ファイルマッピングは不要です。tクラスをロードする - データベースまたはリモートサービスからクラスを取得するクラスローダーを作成できます。フォルダ/ファイルマッピングは意味をなさないでしょうその場合。

関連する問題