5

struct如果所有访问说明符(包括继承)都是,你能确保我public吗?

换句话说:它们是平等的吗?

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

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

3 回答 3

7

是的,它们都是公开的。

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

相当于

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

对于成员,在 §11 中有规定:

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

对于 §11.2 中的基类:

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

其中引用了 C++11 标准。

于 2012-06-07T10:37:36.157 回答
2

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

如果基类没有访问说明符,则当派生类声明为 struct 时假定为 public,而当声明类时假定为 private。

所以是的,你是对的:当派生类是 astruct时,它继承其他类,public除非你另有说明。

于 2012-06-07T10:44:37.237 回答
2

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

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

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

于 2012-06-07T10:45:02.247 回答