那么现在struct可以有虚函数和支持继承吗?那么班级有什么不同?信息隐藏的真正目的是什么?

jok*_*oon 7 c++ inheritance struct information-hiding class

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

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

我想我的"老师"并没有告诉我很多关于C++中struct和classes之间的区别.

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

那么其他的差异呢?他们这么重要吗?

在谈到私有/受保护的属性/方法时,它们在运行时是不可访问的,只是因为编译器在编译时告诉它并报告错误,对吧?然后将这些功能与类进行比较,"信息隐藏"真正为程序员带来了什么?是否在这里,当有人重用该类时,这个人不会滥用该类,因为编译器会报告私有/受保护的东西?

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

Ste*_*sop 25

至于编译器而言,有什么区别structclass其他比默认的可访问性.它们只是用于定义相同内容的两个不同关键字.因此,结构可以有构造函数,析构函数,基类,虚函数,一切.

就程序员而言,使用struct没有这些东西(特别是POD)的类是常见的约定,或者更进一步struct只用于没有用户定义的成员函数的类,只有公共数据成员.人们有时会把这个惯例搞得一团糟,因为如果不是POD,那么认为一个类是POD是非常容易的,但至少他们正在努力.

至少在C++中,信息隐藏绝对与安全性无关.把它放在你的脑海里.它没有提供任何安全性,除了以相同的一般方式,任何良好的编码实践使代码更容易推理,因此程序员犯错误更少.

信息隐藏的目的是允许您稍后更改实现,可能是删除或重命名私有成员,安全地知道您的类的所有用户(类本身和朋友)都没有引用它们.显然,做到这一点很有用,但不那么明显,也许更重要的是,它很有用,因为它在代码中明确了你的类的接口是什么,你希望客户端使用,并且你的类的用户可以正当地期望工作.您可以在原则上使用文档来实现相同的功能,但在实践中,编译器强制执行规则会很好.

它不是"安全的",因为在任何给定的编译器上都可以解决公共/私有保护问题.但是,如果你班级的用户这样做,他们会使用一些奇怪的黑客,他们应该让你的代码在你改变你的课程时停止编译/工作,如果他们来找你抱怨,你可以嘲笑他们.