默认继承访问说明符

新手上路,请多包涵

If I have for example two classes A and B , such that class B inherits A as follows:

class B: public A

在这种情况下,我正在做 public 继承。

如果我把前面的代码写成如下:

class B: A

我将在这里进行什么类型的继承(即,公共)?换句话说,默认访问说明符是什么?

这里只是一个附带问题。我是否调用上一行代码 statements ?尤其是我记得我在 C++ 中读到的没有恐惧:让您感到聪明的初学者指南这 本书 statements 是以 ; 结尾的。你怎么看?

谢谢。

原文由 Simplicity 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 481
2 个回答

只是对所有现有答案的一个小补充:继承的默认类型取决于继承(派生)类型(示例中为 B ),而不是被继承的类型(基础)( A 在示例中)。

例如:

 class A {};
struct B: /* public */ A {};

 struct A {};
class B: /* private */ A {};

原文由 anatolyg 发布,翻译遵循 CC BY-SA 4.0 许可协议

继承的“类型”取决于类的定义方式。有应用于继承的默认访问说明符。从 C++ 标准:

[class.access.base]/2

在没有基类的访问说明符的情况下,当派生类使用类键 struct 定义时假定为公共,而当使用类键定义类时假定为私有 class 。 [ 例子:

 class B { /* ... */ };
class D1 : private B { /* ... */ };
class D2 : public B { /* ... */ };
class D3 : B { /* ... */ };             // B private by default
struct D4 : public B { /* ... */ };
struct D5 : private B { /* ... */ };
struct D6 : B { /* ... */ };            // B public by default
class D7 : protected B { /* ... */ };
struct D8 : protected B { /* ... */ };

这里 B 是 D2、D4 和 D6 的公共基础,D1、D3 和 D5 的私有基础,以及 D7 和 D8 的受保护基础。 —结束示例]

原文由 StoryTeller - Unslander Monica 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏