C++复习6.C/C++高级数据类型
C/C++高级数据类型
1.C语言支持把基本数据类型组合起来形成更加强大的构造数据类型,就是C语言的struct(UDT, User Defined Type).
Struct 和class : 在C++中对C语言的struct进行类改造,使其也可以像C++中的struct那样支持成员函数的声明和定义,从而使struct成为了ADT( Abstract Data Type).在C++中如果不声明访问类型,struct默认的是public,class默认的是private,这也就是在C++中struct和class的唯一区别之处。
对象是不可以自己包含自己的,因为无法计算sizeof,这样编译的时候出错。但是可以包含对象的引用。利用对象的引用关系,可以生成复杂的数据结构,如tree list。
类中的成员对其:优化声明属性的顺序是可以减少内存的占用空间。
2.联合也是一种数据接口,他提供了一种使不同类型数据成员之间共享存储空间的方法,同时可以实现不同类型的数据成员之间自动类型转换。但是与结构不同的是联合对象在同一时间只能够存储一个成员的值,即只有一个数据是活跃的。如果我们同时访问一个联合对象的的多个成员,那么最多有一个值是正确的。
union KeyCode{ short keyNum; char byteArr[2];} 联合内存的大小取决于其中字节数最多的成员,而不是累加,使用联合不会造成任何额外的运行时开销。用一个成员存入数据,而使用另一个成员访问,指定初始值的时候,只可以制定一个初始值,而且该初始值得类型必须与联合的第一个成员的类型匹配。
可以取联合变量的地址,也可以是任何一个成员的地址,因为他们是相等的。
3.枚举 enum
枚举表示了这种类型的变量的取值范围。当我们定义一个枚举类型的时候,如果不特别的指定标识符的值,将从0一直变大
enum WEEK { Sun, Mon = 125, Tue, Wed, Thu = 140, Fri,Sat};
他们的值依次是0,125,126,127,140,141,142 这些值就是WEEK的合法的值。
如 WEEK week = Sun;
在标准的C中enum的内存大小是sizeof(int)。但是在标准的C++中,枚举类型的底层表示并非必须是一个int的大小,可以更大或者更小,换句话说就是如果一个枚举变量的取值范围小道足够使用short 或者byte 来表示的话,那么这个枚举变量的底层表示就可能采用short或者byte,相反如果需要比int类型更大的数据类型表示的话,编译器允许使用更大的类型表示枚举变量。
4.文件
文件操作是一种 IO操作,IO操作不是C++中的组成部分,他是通过函数库实现的。操作系统甚至把设备也当做文件来看待。
内存中的任何对象都是可以看成一些字节序列组成的实体,当我们把内存中的对象写入磁盘文件的时候,计算机只是把它们对应在内存空间的值赋值到磁盘文件中;反过来,也是讲磁盘中的ASCII或者二进制数据写入到内存中。
操作文件是通过流进行操作的,当我们打开一个文件的时候,操作系统建立一个流对象和该文件相关联。操作系统维护了一个保存当前系统中所有打开文件的文件控制块(FCB)的数组,并且利用每一个FCB管理对每一个文件的操作。C语言中一个FILE结构包含了打开文件的描述符,用于检索这个文件控制块数组的下标。
C++复习6.C/C++高级数据类型的更多相关文章
- Oracle11g R2学习系列 之八高级数据类型
所谓的高级数据类型,就是大数据类型,即BCNB(助记词:BC牛逼)+XML数据类型. B:blob,用来存储可变长度的二进制数据. C:clob,主要用来存储可变长度的字符型数据,也就是其他数据库中提 ...
- Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单
原文:Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单 长长的列表文字类型文件 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 214 ...
- hive高级数据类型
hive的高级数据类型主要包括:数组类型.map类型.结构体类型.集合类型,以下将分别详细介绍. 1)数组类型 array_type:array<data_type> -- 建表语句 cr ...
- Scala进阶之路-高级数据类型之集合的使用
Scala进阶之路-高级数据类型之集合的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala 的集合有三大类:序列 Seq.集 Set.映射 Map,所有的集合都扩展自 ...
- Scala进阶之路-高级数据类型之数组的使用
Scala进阶之路-高级数据类型之数组的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的初始化方式 1>.长度不可变数组Array 注意:顾名思义,长度不可变数 ...
- Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict)
Python入门篇-封装与解构和高级数据类型集合(set)和字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装和结构 #!/usr/bin/env pytho ...
- 高级数据类型(arrary、slice、map、ptr)
高级数据类型: 高级数据类型有数组.切片.map.指针.结构体.函数.接口.通道等,本文只介绍Arrary.Slice.map.ptr. 数组: (1)概念: 数组是同一种数据类型的集合.数组从声明时 ...
- redis入门到精通系列(七):redis高级数据类型详解(BitMaps,HyperLogLog,GEO)
高级数据类型和五种基本数据类型不同,并非新的数据结构.高级数据类型往往是用来解决一些业务场景. (一)BitMaps (1.1) BitMaps概述 在应用场景中,有一些数据只有两个属性,比如是否是学 ...
- Python高级数据类型模块collections
collections模块提供更加高级的容器数据类型,替代Python的内置dict,list, set,和tuple Counter对象 提供计数器,支持方便和快速的计数.返回的是一个以元素为键, ...
随机推荐
- JMS API(二)
JMS 公共API 接口共7个: 1.ConnectionFactory 2.Destination 3.Connection 4.Session 5.Message 6.MessageProduce ...
- 两个java小练习
网上看到的一个小练习,自己写了一个,但是时间限制并不符合,并且貌似还有些小问题,暂时放在这儿,代码格式什么的也不太规范. 1.班级排名时间限制: 1000ms 内存限制: 65536kB 描述 信息科 ...
- opkg 不能更新和安装openwrt软件的方法
首先,将所有的IPK 放在自己的虚拟HTTP服务器上.2,用Telnet进入路由器,使用VI编辑器,编程Opkg.conf,命令: vi /etc/opkg.conf3,修改文件,将第一行 ...
- 关于Mvc的分页写法
关于asp.net mvc的分页,网上已经有很多了.本来也想借用,先看了杨涛写的分页控件,感觉用起来稍微有点复杂,而我只需要简单的分页.分页我写过很多次,原理也熟悉,就是构造首页.上一页.下一页及末页 ...
- oracle导入时报错
之前在oracle数据库中新建了一个表空间和用户,在新建的用户下导入".dmp"文件是出现了这个错误. 解决方法: 使用管理员登陆进去,创建一个对应的表空间和用户,就OK了. (表 ...
- 20145327实验三 敏捷开发与XP实践
敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 程序缩进: 结对git的应用 PSP 步骤 耗时 百分比 需求分析 15m 12.5% 设计 30m 25% 代码实现 45m 37.5 ...
- struts2中各个jar包作用 (转)
Struts2.3.4 所需的Jar包及介绍 Jar包的分类 jar包名称 jar包版本 jar包 文件名 jar包 的作用 jar包内包含的主要包路径及主要类 依赖的自有jar包名称 依赖的第三方j ...
- selenium webdriver模拟鼠标键盘
在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.s ...
- 使用FireFox插件RESTClient工具POST方法?
下面尝试用Firefox的restclient,来调取api 当然需要打开火狐浏览器安装restclient的插件https://addons.mozilla.org/en-US/firefox/ad ...
- MySQL-性能优化-优化设计和设计原则
MySQL性能优化目的如何合理的设计数据库?什么样的数据库设计才能给后期DBA优化提供基石? 数据库设计与程序设计的差异? 数据库设计早期优化1. 关系明确(理清表之间的关系,可以通过冗余的方式提高效 ...