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 {}
}