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

struct and class and inheritance (c++)

本文关键字:C++ 继承 结构      更新时间:2023-10-16

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

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

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

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

是的,它们都是公开的。

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

相当于

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

对于成员,在 §11 中指定:

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

对于 §11.2 中的基类:

如果没有基类的访问说明符,则在使用类键结构定义派生类时假定为 public,当使用类键类定义类时,假定为 private。

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

从C++标准,11.2.2,第 208 页:

如果没有基类的访问说明符,则在声明派生类为结构时假定为 public,在声明类时假定为 private。

所以是的

,你是对的:当派生类是struct时,它会继承其他类作为public,除非您另有指定。

来自 C++11 标准(N3242 草案)

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

2 在没有基类的访问说明符的情况下,公共 当使用类键结构定义派生类时假定 当使用类键定义类时,假定为 private .class。