Naw*_*waz 1 c++ inheritance access-specifier language-lawyer
我知道C++ 之间struct和classC++ 之间的差异很小.我也理解几个差异的原因.像这个,
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 { };
Run Code Online (Sandbox Code Playgroud)
这里B是D2,D4和D6的公共基地,D1,D3和D5的私人基地,以及D7和D8的受保护基地.
你们有些人可能会说,这种差异是有道理的,因为struct和class的默认访问权限是不同的(上面的项目符号中给出的差异).但我认为,无论你如何得出它,inherited-struct总是与C-struct(不支持继承)不相容.我可能错了.这就是我寻求好的解释的原因,可能还有例子!:-)