C ++中的struct和class有什么区别?

这个问题已经在C#/ .Net的上下文中提出过了。

现在我想了解C ++中结构和类之间的区别。 请讨论技术差异以及OO设计中选择其中一个的原因。

我将从一个明显的区别开始:

  • 如果您不指定public:private: :,则默认情况下,结构的成员是公共的; 一个班级的成员默认是私人的。
  • 我确信在C ++规范的晦涩的角落还有其他的不同之处。


    你忘记了类和结构之间棘手的第二个区别。

    定义标准(C ++ 98到C ++ 11中的第11.2.2节):

    如果没有基类的访问说明符,则在派生类被声明时假定为public。当类声明为class时,假定为struct和private。

    为了完整起见,在(11.2)中定义了类和结构之间更广泛的已知差异:

    用关键字class定义的类的成员默认是私有的。 用关键字struct或union定义的类的成员默认是公共的。

    其他区别:关键字class可用于声明模板参数,而struct关键字不能如此使用。


    引用C ++ FAQ,

    [7.8]关键字struct和class有什么区别?

    结构的成员和基类是默认公开的,而在类中,它们默认为私有。 注意:你应该使你的基类明确地公开,私有或受保护,而不是依赖于默认值。

    结构和类在功能上是等价的。

    好吧,足够的那种尖锐的清洁技术讲座。 在情感上,大多数开发人员在类和结构之间进行了强烈的区分。 结构只是感觉像是一堆开放的东西,封装或功能很少。 一个班级感觉自己像一个充满活力和负责任的社会成员,拥有智能化的服务,强大的封装屏障和明确的界面。 因为这是大多数人已经拥有的内涵,所以如果你有一个只有很少方法和公共数据的类(这些东西确实存在于设计良好的系统中),你应该使用struct关键字,否则你应该使用类关键词。


    值得记住C ++的起源和与C的兼容性。

    C有结构,它没有封装的概念,所以一切都是公开的。

    当采用面向对象的方法时,默认为公开是一个坏主意,所以在制作一种本质上有利于OOP的C语言(你可以在C中做OO,但它不会帮助你),这是在C ++中的想法(最初是“C With Classes”),默认情况下使成员保持私有是有意义的。

    另一方面,如果Stroustrup已经改变了struct的语义以便其成员在默认情况下是私有的,那么它会破坏兼容性(它不再像标准分歧一样正确,但所有有效的C程序也是有效的C ++程序,这对C ++的立足点有很大的影响)。

    所以引入了一个新的关键字class ,就像一个结构一样,但默认情况下是私有的。

    如果C ++从头开始,没有历史,那么它可能只有一个这样的关键字。 它也可能不会产生它所造成的影响。

    一般来说,当他们做类似于C中结构的使用时,人们会倾向于使用struct; 公共成员,没有构造函数(只要它不在联合体中,你可以在结构体中有构造函数,就像类,但人们往往不会),没有虚拟方法等等。由于语言与人们阅读代码以指导机器(否则我们会坚持使用汇编和原始VM操作码),坚持这一点是个好主意。

    链接地址: http://www.djcxy.com/p/13783.html

    上一篇: What are the differences between struct and class in C++?

    下一篇: Why are Python's 'private' methods not actually private?