C++ 结构、类和继承(c+;+;)

C++ 结构、类和继承(c+;+;),c++,inheritance,struct,C++,Inheritance,Struct,如果struct中的所有访问说明符(包括继承)都是public,您能向我保证吗 换句话说:这些是平等的吗 class C: public B, public A { public: C():A(1),B(2){} //... }; 及 是的,它们都是公开的 struct A : B { C c; void foo() const {} } 相当于 struct A : public B { public: C c; void foo() const {} }

如果
struct
中的所有访问说明符(包括继承)都是
public
,您能向我保证吗

换句话说:这些是平等的吗

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


是的,它们都是公开的

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

struct A : public B {
 public:
  C c;
  void foo() const {}
}
对于成员,第11条规定:

默认情况下,使用关键字类定义的类的成员是私有的。默认情况下,使用关键字struct或union定义的类的成员是公共的

对于§11.2中的基类:

在基类没有访问说明符的情况下,当使用class key struct定义派生类时,假定为public;当使用class key类定义类时,假定为private

其中引用的是C++11标准。

摘自,11.2.2,第208页:

如果基类没有访问规范,则在声明派生类为struct时假定为public,在声明类为class时假定为private

因此,是的,您是正确的:当派生类是
结构时,除非您另有指定,否则它将继承其他类作为
public

来自C++11标准()

11.2基类和基类成员的可访问性

2如果基类没有访问说明符,则为public 使用类键结构定义派生类时假定 当使用类密钥定义类时,假定为private 班级


你可以用一个非常小的程序来测试这个。检查C++中C++类和结构之间的区别:但是他依赖于编译器没有bug:
struct A : public B {
 public:
  C c;
  void foo() const {}
}