为什么C++有类和结构体?
可能重复:
What are the differences between struct and class in C++为什么C++有类和结构体?
如果结构和类之间的唯一区别是默认访问说明符(在C++),那么为什么C++也有课吗?
首先,它与C向后兼容。012第二(也是更重要的一点),它有助于描述你的意图。标准约定是POD应该用struct
表示,并且数据和行为的集合应该用class
表示。
那么为什么类结构允许在结构中使用类运算符,比如运算符重载?这不会破坏兼容性吗? – Lockhead 2011-04-20 20:53:23
在这种情况下,它是关于* convention *的。通过这个和许多其他方式,C++可以让你做很多事情,不管它们是不是好主意。 – Joe 2011-04-20 21:04:00
@MisterSir - no,**向后**兼容性意味着使用结构的C代码将在C++下按预期进行编译和工作。你的例子(结构与行为)是一个C++代码,当然它不会在C下工作,因为C++不能保证**转发**兼容性 – davka 2011-04-20 21:06:40
你想要类具有默认的访问说明符设计面向对象的层次结构时,是私人的,但结构需要有默认的访问说明符是公众C.
保持向后兼容性与C兼容性C没有课,但它有结构。
请注意,这仅仅是.c文件文本中的“向后兼容性”。在C++中,结构实际上是类,默认曝光度为public
,而不是默认曝光度private
。
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样式结构被定义为这样
extern "C" {
struct Bob {
int age;
int height;
};
}
在这种情况下,年龄变得更加的“偏移量0”和高度变更的“偏移+别名(别名而不是被它可以在任何需要的方式实现的概念领域的sizeof(int)的+对准内存管理边界)。
-1废话; 'extern“C”'用于指定链接。它不是*“放入C语言”开关。例如'extern“C”{struct T {T(){}}; }'是完全有效的。 (您的答案的其余部分是正确的。) – 2011-04-24 16:36:35
我的文章中声明“放入C语言”的部分在哪里?我只是说“一个真正的C风格结构是这样定义的......” – 2011-04-24 16:39:40
是的,这是不正确的。你仍然在声明+定义一个C++结构体。 (虽然我现在看到,也许你只是想谈论C兼容性?) – 2011-04-24 16:43:08
至于其他人已经发布,主要的区别是默认的保护水平(即公共或私营)。但是,这也是一个很好的指示实际使用的 数据结构。例如,有时您可能需要一个轻量级结构,类似于java bean。在这种情况下,你可能只是:
class point {
public:
float x, y;
};
这是不太清楚你的意图是什么:
struct point {
float x, y;
};
它,你不使用任何C++特性在这里,对明显。我可能会注意到第二个例子是不好的代码,因为有人没有提供getter和setter。
看到[结构与类](http://stackoverflow.com/questions/2750270/cc-struct-vs-class) – mbx 2011-04-20 20:47:56
http://stackoverflow.com/questions/543515/structs-vs-classes- in-c似乎可能是相关的,等等。 – 2011-04-20 20:48:09
@格雷格我不要求什么差别... – Lockhead 2011-04-20 20:51:54