c++ struct与class的差别

从语法上,在C++中(仅仅讨论C++中)。class和struct做类型定义时仅仅有两点差别:

  (一)默认继承权限。

假设不明白指定,来自class的继承依照private继承处理。来自struct的继承依照public继承处理;

  (二)成员的默认訪问权限。

class的成员默认是private权限,struct默认是public权限。

  除了这两点。class和struct基本就是一个东西。语法上没有不论什么其他差别。

  不能由于学过C就总认为连C++中struct和class都差别非常大,以下列举的说明可能比較无聊,由于struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:

  (1)都能够有成员函数;包含各类构造函数,析构函数。重载的运算符,友元类。友元结构,友元函数。虚函数,纯虚函数,静态函数;

  (2)都能够有一大堆public/private/protected修饰符在里边。

  (3)尽管这样的风格不再被提倡。但语法上二者都能够使用大括号的方式初始化:A a = {1, 2, 3};无论A是个struct还是个class,前提是这个类/结构足够简单。比方全部的成员都是public的,全部的成员都是简单类型,没有显式声明的构造函数。

  (4)都能够进行复杂的继承甚至多重继承,一个struct能够继承自一个class。反之亦可;一个struct能够同一时候继承5个class和5个struct,尽管这样做不太好。

  (5)假设说class的设计须要注意OO的原则和风格,那么没不论什么理由说设计struct就不须要注意。

  (6)再次说明。以上全部说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也仅仅是个包装数据的语法机制。

  ---------------------------------------------------------------

  最后,作为语言的两个keyword,除去定义类型时有上述差别之外,另外另一点点:“class”这个keyword还用于定义模板參数。就像“typename”。但keyword“struct”不用于定义模板參数。



  假设没有多态和虚拟继承,在C++中,struct和class的存取效率全然同样!简单的说就是。存取class的data member和非virtual function效率和struct全然同样。无论该data member是定义在基类还是派生类的。

  假设不是为了和C兼容。C++中就不会有structkeyword。

因此建议是:假设不须要与C兼容或传递參数给C程序,不要在C++中用struct。



  注意class的data member在内存中的布局可不一定是data member的申明次序。C++仅仅保证处于同一个access section的data member依照申明次序排列。



  struct所体现的是一种数据结构。而class则是体现OOP思想中的"封装"的特性~~~

  另一个差别:struct能够用{}赋初值,而class不行

  比方声明例如以下:

  struct abc{ int m1; float m2; bool m3; }

  能够这么构造对象:

  abc abcInstance{ 1, 1.0f, false };

  struct:属性
 class:属性+行为

  注意:在VC6里。class能够与模板keywordtypename互换,可是struct好像就不能够,编译好像通只是。对这个问题。我专门查了一些资料,发现网上确实有说 struct不能用于模板keyword而class能够。这似乎应该是他们的一个不同了。然而。我又看了一下 《深度探索C++对象模型》,在书的前几章(好像就是第一章)Lippman说:本来他的编译器是不支持将struct作为模板keyword的,但后来改变了,也就是说struct 和class除了默认的訪问属性外。其它场合下真正的全然一样了。对此,我觉得这个按理说是这种。但不同的编译器可能会有自己的处理,就像VC6那样。

  class中有方法,

  struct中没有.

  class是一个扩展的struct

  array(类型一样)->struct(类型能够不一致)->class(加入方法)

  尽管两者都能够捆绑行为。

  可是,理解不一样。



  struct,就是对程序猿全局可见的数据与方法。

简化数据逻辑结构的设计。能够说是一种自己定义的数据结构。

  而class,则是将数据与方法封装,即让行为与数据一致。

则是一种编程方法。即客观世界在代码世界中的体现。体现的是一种编程思想。



  在C里面:struct不能包括函数,而class能够。

  在C++里面:都能够有函数,默认情况下struct中变量是public,而class中是private

  有一点不明确,class支持的继承和多态,struct也支持??

  class在赋值运算符右边出现须要有定义的拷贝构造函数,而struct是默认的位拷贝.

  可是一般从兼容C的角度考虑,struct里面仅仅包括数据成员而不包括成员函数。这仅仅是一个编程习惯问题。

posted @ 2017-05-06 09:12  gccbuaa  阅读(253)  评论(0编辑  收藏  举报