Java と C++ では、クラスはデフォルトでプライベートまたはパブリックですか?
3 に答える
ジャワ:
デフォルトでは、クラスの可視性はパッケージ プライベートです。つまり、同じパッケージ内のクラスに対してのみ可視です。
C++ :
このクラスには、Java のように可視性が定義されていません。これらは、コンパイル ユニットに含めた場合に表示されます。
Java では、最上位クラスは public または non-public のいずれかです。「プライベート」はありません。public キーワードのみを使用するか、そのままにしておくことができます。オフのままにしておくと、非公開になります。つまり、同じパッケージ内の他のクラスからのみ表示されます。
ネストされたクラス、つまり別のクラス内のクラスは、他のクラス メンバーと同様に、パブリック、パッケージ プライベート、保護、またはプライベートにすることができます。デフォルト (つまり、修飾子のないもの) は package-private で、同じパッケージ内のクラスにのみ表示されます。
編集:C++の回答を忘れたので、@ zellerの回答を参照してください(そして賛成票を投じてください)。:)
JLS の §6.6.1 によると、
最上位のクラスまたはインターフェイスの型が public と宣言されていない場合、宣言されているパッケージ内からのみアクセスできます。
したがって、Java クラスはデフォルトでpackage-privateです。
ただし、これは C++ には当てはまりません。クラスには可視性がありません。クラスのメンバーだけがアクセス コントロールを持つことができます。メンバー アクセス制御の詳細については、C++11 標準の §11 を参照してください。以下は ¶1 からの抜粋です...
クラスのメンバーは、
private
; つまり、その名前は、それが宣言されているクラスのメンバーとフレンドだけが使用できます。protected
; つまり、その名前は、それが宣言されているクラスのメンバーとフレンド、そのクラスから派生したクラス、およびそれらのフレンドによってのみ使用できます (11.4 を参照)。public
; つまり、その名前はアクセス制限なしでどこでも使用できます。