HelloKitty19901231 2017-06-09 02:54 采纳率: 100%
浏览 3263
已采纳

C++中的class和struct的区别

C++中的class和struct的区别
从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别?

  • 写回答

3条回答

  • wax11111 2017-06-09 02:55
    关注

    从语法上,在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从根本上也只是个包装数据的语法机制。

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

    关于使用大括号初始化
      class和struct如果定义了构造函数的话,都不能用大括号进行初始化
      如果没有定义构造函数,struct可以用大括号初始化。
      如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。
      关于默认访问权限
      class中默认的成员访问权限是private的,而struct中则是public的。
      关于继承方式
      class继承默认是private继承,而struct继承默认是public继承。
      关于模版

      在模版中,类型参数前面可以使用class或typename,如果使用struct,则含义不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是类型参数。

    class中有个默认的this指针,struct没有
    不同点:构造函数,析构函数 this 指针

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作