C++では、privateがクラスのメンバのデフォルトの可視性はなぜですか?publicの構造体はなぜですか? Cの構造体との後方互換性のためにおそらくC++クラス/構造体メンバのデフォルトの可視性
35
A
答えて
61
C++はCの構造体のスーパーセットは、そのメンバーのセマンティクスは公共のものだったC、から持ち越されたとして導入されました。構造体を使用するC++でも動作することが望まれていたライブラリを含め、Cコードがたくさんあります。クラスはC++で導入され、オブジェクト指向のカプセル化の哲学に準拠するため、メンバーはデフォルトで非公開です。
1
。このようにしてCコードで宣言された構造体は、C++コードで使用されている場合と同じように動作します。
7
クラスはオブジェクトのオリエンテーションを行う通常の方法です。つまり、メンバ変数はプライベートでpublicアクセサーを持つ必要があります。これはlow couplingを作成するのに適しています。一方、Structsは常にpublicであるC構造体と互換性がなければなりません(C言語のpublicとprivateの概念はありません)。また、アクセサ/ミューテータを使用しないでください。
関連する問題
- 1. CORBA IDL:構造体メンバのデフォルト値
- 2. 構造体メンバ
- 3. 構造体変数と構造体メンバ
- 4. インクリメント構造体のメンバ
- 5. 構造体メンバのマクロ
- 6. 構造体メンバの型キャスト
- 7. 構造体メンバへのポインタ
- 8. uncrustify、c、構造体初期化メンバ
- 9. マクロで構造体フィールドの可視性を保持する
- 10. 構造体を別の構造体メンバにキャストする方法
- 11. C#クラスと構造体
- 12. C++の構造体内の構造体
- 13. C構造体内の構造体内部の構造体
- 14. 暗黙の型変換:ないクラスのメンバや構造体
- 15. C++ - 構造体のクラスへのポインタ?
- 16. 無効なトークン ';'クラス構造体またはインターフェイスのメンバ宣言
- 17. 構造体内のデフォルト値
- 18. 構造体のメンバにアクセスし、一定
- 19. メンバの有無による構造体
- 20. 構造体のメンバを初期化
- 21. 構造体とクラスCではC++
- 22. 構造体のメンバをRustの同じ構造体のメソッドに渡す
- 23. ヌル可能な構造体対クラス
- 24. "C言語で共有メモリの構造体メンバにアクセスする"
- 25. ポインタで構造体のメンバを初期化する(C)
- 26. 特定の構造体メンバを別の構造体にコピーする
- 27. C/C++ qsort構造体内の構造体の配列
- 28. 構造体メンバが構造体へのポインタで更新されない
- 29. C#クラスと可視性のネスト?
- 30. パーズツリー構造の可視化
まあ、カプセル化がすべてのメンバーをプライベートにすることは厳密には必要ではありません。 C++インライン化では、アクセサーメソッドは非常に安価になる可能性がありますが、関数呼び出しのオーバーヘッドを考慮した多くのOOP言語では、人々は公共アクセスを安価に使用する傾向があります。より細かい制御のために、langがそれをサポートするならば、プロパティ宣言を使うことができます。ただし、ネイティブコードでは、管理されている言語よりも変数の変更を追跡するのが難しいため、コード内の1つのポイントで属性を設定することは理にかなっています。 – progician