【发布时间】:2010-12-13 09:10:51
【问题描述】:
我知道在 C++ 中 struct 和 class 之间几乎没有区别。我也理解少数差异的原因。像这个,
- 结构的成员是 公开的
默认;班级成员是
默认为私有。 struct 的成员之所以默认为public,是为了让
C++-struct与C-struct兼容。而类成员之所以默认是私有的,是为了引入数据封装的概念(即执行面向对象的原则/技术/等)。
我不明白的是,引用标准 $11.2/2 [class.access.base]
在没有访问说明符的情况下 一个基类,当 派生类声明为 struct 和 private 假定当类 被声明为类。
这种扭曲和反统一的原因是什么? 为什么需要这种差异?
标准中的示例,
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 的受保护碱基。
编辑
你们中的一些人可能会说,考虑到结构和类的默认访问权限不同(上面的要点中给出的差异),这种差异是有意义的。但我认为,inherited-struct 与C-struct (不支持继承)完全不兼容,无论你如何派生它。不过我可能是错的。这就是为什么我正在寻求好的解释,可能还有例子! :-)
【问题讨论】:
标签: c++ inheritance language-lawyer access-specifier