zoukankan      html  css  js  c++  java
  • 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里面仅仅包括数据成员而不包括成员函数。这仅仅是一个编程习惯问题。

  • 相关阅读:
    Creating a generic Web Parts for hosting ASP.NET User Controls
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 1)
    How to use CreateChildContorls method inherited from System.Web.UI.Control
    How to quickly access Web Part Management Page
    SQL Script tips for MS SQL Server
    How to enable single signon service on the SPS
    A brief summary of UML & Rational Rose – Use Case Diagram, Part II
    Borland Together for Visual Studio.Net V2.0 安装问题
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 2)
    体验ReSharper V1.0 for VS.Net 2003 Part I
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6815715.html
Copyright © 2011-2022 走看看