9

可能重复:
C++中的struct和class有什么区别

http://www.cplusplus.com/reference/std/typeinfo/type_info/

我想我的“老师”并没有告诉我很多关于 C++ 中结构和类之间的区别。

我在其他一些关于继承的问题中读到,结构默认是公共的......我也猜结构没有构造函数/析构函数......

那么其他的区别是什么?他们有那么重要吗?

当谈到私有/受保护的属性/方法时,它们在运行时无法访问,只是因为编译器在编译时告诉它并报告错误,对吧?那么将这些特性与类进行比较,“信息隐藏”究竟给程序员带来了什么?是否在这里,当有人重用该类时,此人不会滥用该类,因为编译器会报告私有/受保护的东西?

我仍然在为信息隐藏的真正目的而奋斗,它仍然想在我的脑海中听起来像是它为程序带来了更多的安全性,这意味着更少的安全漏洞,但我真的对这种语言设计的目标感到困惑...... (而且我不打算以任何方式反对 C++,我只是想了解在什么情况下这个功能可能有趣或不有趣;如果没有,那不是问题,但我只是想知道......)。

4

1 回答 1

29

就编译器而言,除了默认可访问性之外,struct没有其他区别。class它们只是定义同一事物的两个不同关键字。所以,结构可以有构造函数、析构函数、基类、虚函数等等。

就程序员而言,通常的约定是struct用于没有这些东西的类(特别是POD),或者更进一步,struct只用于根本没有用户定义的成员函数,只有公共数据的类成员。人们有时会搞砸这种约定,因为当一个类不是 POD 时,很容易认为它是 POD,但至少他们正在尝试。

至少在 C++ 中,信息隐藏与安全性完全无关。把它从你的脑海中消失。它不提供任何安全性,除了任何良好的编码实践使代码更容易推理的一般方式,因此程序员犯的错误更少。

信息隐藏的目的是允许您稍后更改实现,也许是删除或重命名私有成员,确保您的类的用户,除了类本身和朋友之外,都没有引用它们。显然,这样做很有用,但不太明显,也许更重要的是,它很有用,因为它在代码中明确了你的类的接口是什么,你希望客户使用,并且你的类的用户可以正确地期望工作。原则上您可以通过文档实现相同的目标,但实际上编译器强制执行规则会很好。

它不是“安全的”,因为在任何给定的编译器上都可以绕过公共/私人保护。但是,如果您班级的用户这样做,他们正在使用一些怪诞的黑客,他们应该在您更改班级时停止编译/工作,如果他们来找您抱怨,您可以嘲笑他们。

于 2010-10-02T12:17:05.567 回答