在C++中,结构体是一种特殊形态的类。

结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性。

  类中,对于未指定访问控制属性的成员,其访问控制属性为私有类型(private)

  结构体中,对于未指定任何访问控制属性的成员,其访问控制属性为公有类型(public)

C++中,不使用结构体丝毫不会影响程序的表达能力。C++之所以要引入结构体,是为了保持和C程序的兼容性。

但有时仍会在C++中使用结构体,是因为,可以使用结构体将不同类型数据组成整体,方便于保存数据。(若用类来保存,因类中成员默认为私有,还要为每个数据成员特定函数来读取和改写各个属性,比较麻烦。)

C语言中结构体不允许定义函数成员,且没有访问控制属性的概念。

C++为C语言中的结构体引入了成员函数、访问控制权限、继承、包含多态等面向对象特性。

C++在struct之外引入了class关键字,但为了保持与C程序的兼容,C++保留了struct关键字,并规定结构体默认访问控制权限为公有类型。

另外,C语言中,空结构体的大小为0,而C++中空结构体(属于空类)的大小为1。

C++中空类的大小为1的原因:

  空类也可以实例化,类实例化出的每个对象都需要有不同的内存地址,为使每个对象在内存中的地址不同,所以在类中会加入一个隐含的字节。

最新文章

  1. 浅谈python中得import xxx,from xxx import xxx, from xxx import *
  2. python 入门学习之环境搭载
  3. javscript闭包的准备工作 -- 作用域与作用域链
  4. SQL Server 查询表的记录数(3种方法,推荐第一种)
  5. 找出linux服务器IO占用高的程序
  6. 常用按键ASCII码
  7. Android Activity界面切换添加动画特效
  8. Aggregating local features for Image Retrieval
  9. Lua编译
  10. Mac OSX的开机启动配置
  11. 很久没来这里,今天的评测java怪东西,左右Date类和时间戳转换
  12. javascript入门篇(五)
  13. FFmpeg 结构体学习(六): AVCodecContext 分析
  14. POJ 3074 Sudoku(算竞进阶习题)
  15. thymeleaf:日常使用总结
  16. linux的python版本升级
  17. 《DSP using MATLAB》Problem 6.22
  18. [翻译] ObjectAL for iPhone and Mac(持续更新)
  19. Android App 注射&&Drozer Use
  20. 浅谈 Sql Server 游标

热门文章

  1. WPF中MVVM模式下控件自有的事件绑定
  2. 005 Genymotion模拟器的使用和逍遥模拟器的使用
  3. PHP 位运算符
  4. 让Nginx支持pathinfo
  5. PHP二次开发
  6. windos下安装mongodb
  7. (转)求有向图的强连通分量个数(kosaraju算法)
  8. Mysql5.7不区分大小写设置
  9. TCP/IP协议分为哪四层,具体作用是什么。
  10. 小程序wxml文件引用方式