web-dev-qa-db-ja.com

C ++クラス/構造体メンバーのデフォルトの可視性

C++では、なぜプライベートはクラスのメンバーのデフォルトの可視性ですが、構造体はパブリックなのですか?

50
S I

C++はCのスーパーセットとして導入されました。構造体はCから継承され、メンバーのセマンティクスはパブリックのセマンティクスでした。構造体を使用する、C++でも動作することが望まれるライブラリを含む、Cコードの全体が存在します。クラスはC++で導入され、OOカプセル化の哲学に準拠するため、デフォルトではメンバーはプライベートです。

80
Oren Trutner

クラスはオブジェクト指向を行う通常の方法であるため、メンバー変数はプライベートでパブリックアクセサーを持つ必要があります。これは 低結合 の作成に適しています。一方、構造体は、常に公開されているC構造体と互換性がなければならず(Cにはpublicとprivateの概念はありません)、アクセサー/ミューテーターを使用しません。

9
a_m0d

おそらくC構造体との後方互換性のためです。このように、Cコードで宣言された構造体は、C++コードで使用された場合と同じように機能し続けます。

1
Karl Voigtland