struct和class and inheritance(c ++)

Grz*_*cki 5 c++ inheritance struct

你能保证我,如果在所有访问修饰符(包括继承)structpublic

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

class C: public B, public A { public:
    C():A(1),B(2){}
    //...
};
Run Code Online (Sandbox Code Playgroud)

struct C: B, A {
    C():A(1),B(2){}
    //...
};
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 7

是的,他们都是公开的.

struct A : B {
  C c;
  void foo() const {}
}
Run Code Online (Sandbox Code Playgroud)

相当于

struct A : public B {
 public:
  C c;
  void foo() const {}
}
Run Code Online (Sandbox Code Playgroud)

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

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

对于§11.2中的基类:

在没有基类的访问说明符的情况下,当使用类 - 键结构定义派生类时假定为public,并且在使用类 - 键类定义类时假定为private.

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


das*_*ght 2

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

\n\n
\n

如果基类没有指定访问权限,则在将派生类声明为 struct 时假定为 public,在将类声明为 class 时假定为 private。

\n
\n\n

所以是的,你是对的:当派生类是 a 时struct,它会继承其他类,public除非你另外指定。

\n