struct
如果所有访问说明符(包括继承)都是,你能确保我public
吗?
换句话说:它们是平等的吗?
class C: public B, public A { public:
C():A(1),B(2){}
//...
};
和
struct C: B, A {
C():A(1),B(2){}
//...
};
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 中的基类:
在基类没有访问说明符的情况下,当派生类使用类键结构定义时假定为公共,而当使用类键类定义类时假定为私有。
其中引用了 C++11 标准。
从C++ 标准,11.2.2,第 208 页:
如果基类没有访问说明符,则当派生类声明为 struct 时假定为 public,而当声明类时假定为 private。
所以是的,你是对的:当派生类是 astruct
时,它继承其他类,public
除非你另有说明。
来自 C++11 标准(N3242 草案)
11.2 基类和基类成员的可访问性
2 在基类没有访问说明符的情况下,当派生类使用类键结构定义时假定为公共,而当使用类键类定义类时假定为私有。