我知道两者之间几乎没有什么区别 structclass 在C++中。我也了解一些差异的原因。像这个,

  • 结构体的成员有 默认情况下公开;班级成员是默认为私有. 。struct 成员的原因是 默认公开, 是为了使 C++-struct 兼容于 C-struct. 。以及班级成员的原因 默认为私有, ,是要引入概念 数据封装 (即强制执行面向对象的原则/技术/等)。

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

在没有用于基类的访问指示符的情况下,当声明派生类的结构并在该类声明类别时假定私人时,假定公共。

这种扭曲和反统一的理由是什么? 为什么需要这种差异?

标准中的示例,

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 (不支持继承),无论您如何派生它。但我可能是错的。这就是为什么我正在寻求好的解释,可能还有例子!:-)

有帮助吗?

解决方案

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

其他提示

考虑到结构和类的默认访问权限不同,这是否有意义?(如你的第一个要点)

如果您从结构体(默认情况下为公共)继承,则在不指定访问修饰符的情况下,您暗示着公共继承,而如果您从类(默认情况下为私有)继承,则在不指定访问修饰符的情况下,您暗示着私有继承继承。

我在你的问题中遗漏了什么吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top