C++では、なぜプライベートはクラスのメンバーのデフォルトの可視性ですが、構造体はパブリックなのですか?
C++はCのスーパーセットとして導入されました。構造体はCから継承され、メンバーのセマンティクスはパブリックのセマンティクスでした。構造体を使用する、C++でも動作することが望まれるライブラリを含む、Cコードの全体が存在します。クラスはC++で導入され、OOカプセル化の哲学に準拠するため、デフォルトではメンバーはプライベートです。
クラスはオブジェクト指向を行う通常の方法であるため、メンバー変数はプライベートでパブリックアクセサーを持つ必要があります。これは 低結合 の作成に適しています。一方、構造体は、常に公開されているC構造体と互換性がなければならず(Cにはpublicとprivateの概念はありません)、アクセサー/ミューテーターを使用しません。
おそらくC構造体との後方互換性のためです。このように、Cコードで宣言された構造体は、C++コードで使用された場合と同じように機能し続けます。