基类的“默认”访问说明符的差异的基本原理

时间:2010-12-13 09:10:52

标签: c++ inheritance language-lawyer access-specifier

我知道C ++中structclass之间的差异很小。我也理解几个差异的原因。像这样,

  • struct的成员是 public by 默认;班级成员 默认为私人。 struct的成员默认公开的原因,是为了使C++-structC-struct兼容。并且为什么类的成员默认私有的原因是引入数据封装的概念(即强制执行面向对象的原则/技术/等)。

我不明白这是引用标准$ 11.2 / 2 [class.access.base]

  

缺少访问说明符   基类,公共假设时   派生类声明为struct   在课堂上假设和私人   被宣布为等级。

这种扭曲和反均匀性的基本原理是什么? 为什么需要这种差异?

标准示例,

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基地。


修改

有些人可能会说,鉴于struct和class的默认访问权限不同(上面的项目符号中给出的差异),这种差异是有道理的。但我认为,inherited-struct完全与C-struct(不支持继承)不兼容,无论你如何推导它。我可能错了。这就是我寻求好的解释的原因,可能还有例子! : - )

2 个答案:

答案 0 :(得分:7)

我不确定为什么你认为这是一个扭曲,你与成员子对象和基类子对象保持一致。它们对于使用struct声明的类是公共的,对于使用class声明的类是私有的。简单易记。

答案 1 :(得分:1)

这是否有意义,因为struct和class的默认访问权限不同? (如你的第一个要点)

如果从结构(默认情况下是公共结构)继承,则不指定访问修饰符,则表示公共继承,而如果从类(默认为私有)继承,则不指定访问修饰符,暗示私人继承权。

我错过了你的问题吗?