Reputation: 10843
Could you ensure me, if all access specifiers (including inheritance) in struct
are public
?
In other words: are those equal?
class C: public B, public A { public:
C():A(1),B(2){}
//...
};
and
struct C: B, A {
C():A(1),B(2){}
//...
};
Upvotes: 5
Views: 2635
Reputation: 38912
From the C++11 Standard (N3242 draft)
11.2 Accessibility of base classes and base class members
2 In the absence of an access-specifier for a base class, public is assumed when the derived class is defined with the class-key struct and private is assumed when the class is defined with the class-key class.
Upvotes: 2
Reputation: 227410
Yes, they all are public.
struct A : B {
C c;
void foo() const {}
}
is equivalent to
struct A : public B {
public:
C c;
void foo() const {}
}
For members, it is specified in §11:
Members of a class defined with the keyword class are private by default. Members of a class defined with the keywords struct or union are public by default.
and for for base classes in §11.2:
In the absence of an access-specifier for a base class, public is assumed when the derived class is defined with the class-key struct and private is assumed when the class is defined with the class-key class.
where the references are to the C++11 standard.
Upvotes: 7
Reputation: 726579
From C++ standard, 11.2.2, page 208:
In the absence of an access-specifier for a base class, public is assumed when the derived class is declared struct and private is assumed when the class is declared class.
So yes, you are correct: when the derived class is a struct
, it inherits other classes as public
unless you specify otherwise.
Upvotes: 2