Grzegorz Wierzowiecki
Grzegorz Wierzowiecki

Reputation: 10843

struct and class and inheritance (c++)

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

Answers (3)

mloskot
mloskot

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

juanchopanza
juanchopanza

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

Sergey Kalinichenko
Sergey Kalinichenko

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

Related Questions