2012-06-07 25 views
5

structのすべてのアクセス指定子(継承を含む)がpublicであることを確認できますか?構造体とクラスと継承(C++)

他の言葉では:それらは等しいか?

class C: public B, public A { public: 
    C():A(1),B(2){} 
    //... 
}; 

struct C: B, A { 
    C():A(1),B(2){} 
    //... 
}; 
+0

非常に小さなプログラムでこれをテストできました。 – Nobody

+3

このスレッドは、C++のクラスと構造体の違いについて調べています。http://stackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-c –

+2

@Nobody:しかし、彼はバグを持っていない彼のコンパイラに頼るだろう:) –

答えて

2

C++ standard、11.2.2からは、ページ208:基本クラスのアクセス特異的ERが存在しない場合には

は、公共のは、派生クラスが構造体宣言され、プライベートを想定した場合を想定したとき、クラス宣言されたクラスです。

そうです、あなたは正しいです:派生クラスがstructときに特に指定しない限り、それはpublicなどの他のクラスを継承します。

7

はい、それらはすべて公開されています。

struct A : B { 
    C c; 
    void foo() const {} 
} 

がメンバーのために

struct A : public B { 
public: 
    C c; 
    void foo() const {} 
} 

に相当し、それは§11で指定されている:キーワードクラスで定義されたクラスの

メンバーは、デフォルトではプライベートです。キーワードstructまたはunionで定義されたクラスのメンバーは、デフォルトでpublicです。

及び§11.2における基底クラスのための:派生クラスがクラスキー構造体で定義されている場合

基底クラスのアクセス指定子が存在しない場合には、公衆が想定されクラスがクラス・キー・クラスで定義されている場合は、privateが仮定されます。

ここで、参考文献はC++ 11標準規格です。

2

基底クラスのアクセス指定子の非存在下で基底クラスと基本クラスのメンバー

2のC++ 11標準(N3242 draft

11.2アクセスから、公衆 あります派生クラスがクラスキー構造体 で定義され、クラスがクラスキー クラスで定義されている場合にプライベートが仮定されていると仮定します。