Why does C++ have both classes and structs?
本问题已经有最佳答案,请猛点这里访问。
布尔奇1(P)如果结构和类别之间的唯一差别是缺乏获得具体信息的机会(在C++),那么为什么他们没有C++也有分类?(p)
首先,它与C向后兼容。其次(更重要的是),它有助于描述你的意图。标准惯例是,pods应该用
正如其他人发布的一样,主要区别在于默认的保护级别(即公共或私有)。然而,它也很好地说明了数据结构的实际使用。例如,有时你可能想要一个轻量级的结构,类似于Java bean。在这种情况下,您可能只需要:
1 2 3 | struct point { float x, y; }; |
很明显,这里没有使用任何C++特性,而不是:
1 2 3 4 | class point { public: float x, y; }; |
。
不太清楚你的意图是什么。我可能会注意到第二个示例是坏代码,因为没有人提供getter和setter。
在设计面向对象的层次结构时,您希望类的默认访问说明符是私有的,但结构需要将默认访问说明符设置为公共的,以保持与C的兼容性。
与C.C的向后兼容性没有类,但它有结构。
请注意,这只是.c文件文本中的"向后兼容性"。在C++中,Struts是真正的类,默认的EDOCX1×2Ω暴露,而不是EDCOX1(3)的默认曝光。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Bob { // I haven't overridden the exposure, so it's private int age; int height; public: Bob(); }; struct Bob { // I haven't overridden the exposure, so it's public int age; int height; // note the constructor defaults to the"default" constructor. }; |
这样定义了一个真正的C样式结构
1 2 3 4 5 6 | extern"C" { struct Bob { int age; int height; }; } |
号
在这种情况下,年龄更多地成为"offset+0"的别名,高度更多地成为"offset+(sizeof(int)+对齐内存管理器边界)的别名,而不是可以以任何所需方式实现的概念字段。