C++ ではstruct
との間にほとんど違いがないことを私は知っています。class
また、いくつかの違いの理由も理解しています。このように、
- struct のメンバーはデフォルトで public です。class のメンバーは
デフォルトで private です。struct のメンバーがデフォルトで public になって
C++-struct
いるのは、 との互換性を持たせるためC-struct
です。また、クラスのメンバーがデフォルトでプライベートである理由は、データのカプセル化の概念を導入するためです(つまり、オブジェクト指向の原則/テクニック/その他を適用します)。
私が理解していないのは、標準 $11.2/2 [class.access.base] を引用して、これです
基本クラスのアクセス指定子がない場合、派生クラスが struct として宣言されている場合は public が想定され、クラスが class として宣言されている場合は private が想定されます。
このねじれと反均一性の根拠は何ですか? なぜこの違いが必要なのですか?
標準からの例、
class B { };
class D1 : private B { };
class D2 : public B { };
class D3 : B { }; //B private by default
struct D4 : public B { };
struct D5 : private B { };
struct D6 : B { }; //B public by default
class D7 : protected B { };
struct D8 : protected B { };
ここで、B は D2、D4、および D6 のパブリック ベース、D1、D3、および D5 のプライベート ベース、および D7 および D8 の保護ベースです。
編集
構造体とクラスのデフォルトのアクセスが異なることを考えると、この違いは理にかなっていると言う人もいるかもしれません (違いは上記の箇条書きに示されています)。しかし、どのように派生させても、inherited-struct
完全に(継承をサポートしていない)と互換性がないと思います。C-struct
私は間違っているかもしれませんが。そのため、おそらく例を使用して、適切な説明を求めています! :-)