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对象 提供计数器,支持方便和快速的计数.返回的是一个以元素为键, ...
随机推荐
- MyBatisPartA
(正在补充) 1.从第一个程序开始,通过mybatis实现数据库表内容的增删改查 (源码zip包) 1.0准备工作 建数据库mybatis,在其中创建表sql语句如下: ; -- ---------- ...
- 『NiFi 学习之路』把握 —— 架构及主要部件
一.概述 通过前面几篇文章的学习,相信你对 NiFi 有了一个基础性的了解. 数据处理和分发系统 是什么概念? NiFi 系统中数据的传递方式是怎样的? NiFi 的重要 Processor 有哪些? ...
- DataTable转换成IList
//文章出处: http://www.cnblogs.com/hlxs/archive/2011/05/09/2087976.html DataTable转换成IList 在用C#作开发的时候经常要把 ...
- maven 介绍(二)
本文内容主要摘自:http://www.konghao.org/index 内部视频 三.仓库 仓库:本地仓库:远程仓库:私有仓库(nexus) 1. nexus 的安装: 1). 下载并且解压缩 2 ...
- 20145216史婧瑶《Java程序设计》第10周学习总结
20145216 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 一.网络概述 网络编程就是两个或多个设备(程序)之间的数据交换. 识别网络上的每个设备:①IP地址②域名 ...
- mysql对数据库的备份和还原
在对mysql数据库的某个数据库进行备份时,使用 mysqldump命令来进行操作 mysqldump -u root -p db_database_name > /[your_path.mys ...
- 编解码技术:I帧与IDR帧的区别总结
编解码技术:I帧与IDR帧的区别总结 DR(Instantaneous Decoding Refresh)--即时解码刷新. I帧与IDR帧的相同点在于: 1.I和IDR帧都是使用帧内预测的: 2.都 ...
- composer安装教程 windows系统 | Linux系统 | mac系统
如何安装 Composer 下载 Composer 安装前请务必确保已经正确安装了 PHP.打开命令行窗口并执行 php -v 查看是否正确输出版本号. 打开命令行并依次执行下列命令安装最新版本的 C ...
- 自学Java测试代码 - 简单地Student类
2017-08-23 23:45:38 writer:pprp 写这个还蛮开心的 package test; public class Student { //创建成员变量 String name ...
- Testng中注释简介
1. @Before和@After 注释 这两个就比较多,一般用于在测试构件上.关于测试构件以后详细介绍,测试构件一般有测试之前的操作和测试运行之后的清除数据的操作. Before分类有@Before ...