那么现在struct可以有虚函数并且支持继承吗?那和上课有什么区别呢?信息隐藏的真正目的是什么?[复制]

StackOverflow https://stackoverflow.com/questions/3845564

可能的重复:
C++中结构体和类有什么区别

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

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

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

那么还有什么其他区别呢?它们有那么重要吗?

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

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

有帮助吗?

解决方案

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

对于程序员来说,这是一个常见的约定 struct 对于没有这些东西的类(特别是 ),或者更进一步并使用 struct 仅适用于根本没有用户定义成员函数、只有公共数据成员的类。人们有时会搞乱这个约定,因为很容易认为一个类是 POD,但实际上它不是,但至少他们在尝试。

至少在C++中,信息隐藏与安全性绝对无关。把它从你的脑海中抛开吧。它不提供任何安全性,除非以同样的一般方式,任何良好的编码实践都会使代码更容易推理,因此程序员会犯更少的错误。

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

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

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