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