我知道C++struct
和class
C++ 之间几乎没有区别。我也理解少数差异的原因。像这个,
- struct 的成员默认是 public 的;类的成员
默认是私有的。struct 的成员默认是 public 的原因是为了
C++-struct
兼容C-struct
. 而类成员之所以默认是私有的,是为了引入数据封装的概念(即执行面向对象的原则/技术/等)。
我不明白的是,引用标准 $11.2/2 [class.access.base]
如果基类没有访问说明符,则在派生类声明为 struct 时假定为 public,而在声明类时假定为 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 的受保护基础。
编辑
你们中的一些人可能会说,鉴于 struct 和 class 的默认访问权限不同(上面的要点中给出的差异),这种差异是有意义的。但我认为,inherited-struct
完全不兼容C-struct
(不支持继承),无论你如何派生它。不过我可能是错的。这就是为什么我正在寻求好的解释,可能还有例子!:-)