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条)

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services