我知道C ++中struct
和class
之间的差异很小。我也理解几个差异的原因。像这样,
C++-struct
与C-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
(不支持继承)不兼容,无论你如何推导它。我可能错了。这就是我寻求好的解释的原因,可能还有例子! : - )
答案 0 :(得分:7)
我不确定为什么你认为这是一个扭曲,你与成员子对象和基类子对象保持一致。它们对于使用struct
声明的类是公共的,对于使用class
声明的类是私有的。简单易记。
答案 1 :(得分:1)
这是否有意义,因为struct和class的默认访问权限不同? (如你的第一个要点)
如果从结构(默认情况下是公共结构)继承,则不指定访问修饰符,则表示公共继承,而如果从类(默认为私有)继承,则不指定访问修饰符,暗示私人继承权。
我错过了你的问题吗?