1

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私は間違っているかもしれませんが。そのため、おそらく例を使用して、適切な説明を求めています! :-)

4

2 に答える 2

7

それがひねりだと思う理由がわかりません。メンバーのサブオブジェクトと基本クラスのサブオブジェクトとの一貫性があります。これらは、 で宣言されたクラスに対してパブリックであり、 で宣言されstructたクラスに対してプライベートですclass。シンプルで覚えやすい。

于 2010-12-13T09:16:05.227 に答える
1

構造体とクラスのデフォルトのアクセスが異なることを考えると、これは意味がありませんか? (最初の箇条書きのように)

構造体 (デフォルトではパブリック) から継承する場合は、アクセス修飾子を指定せずにパブリック継承を意味しますが、クラス (デフォルトではプライベート) から継承する場合は、アクセス修飾子を指定せずにプライベートを意味します。継承。

あなたの質問で何か見逃しましたか?

于 2010-12-13T09:17:43.460 に答える