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对象 提供计数器,支持方便和快速的计数.返回的是一个以元素为键, ...
随机推荐
- google GFS
我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的.可伸缩的分布式文件系统.GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服 ...
- JSM 学习(一)
JMS 支持两类消息传送模型:点对点模型和发布/订阅模型.又称这些消息传送模型为消息传送域.点对点模型和发布订阅模型分别缩写为p2p和Pub/Sub.发布订阅模型用于一对多消息广播,点对点模型用于一对 ...
- Postman 把response的值自动放到变量里
@ 1里面定义个变量2 3这里加上postman.setEnvironmentVariable("MatchID",JSON.parse(responseBody)); 这样rep ...
- 基于Python操作redis介绍
(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 毕业前的最后一个学期(2016.03),龙哥结婚了.可是总有些人喜欢嘲笑别人,调侃我.当时我就理直气壮的告诉他们,等龙哥孩子 ...
- ipython安装(python3.6.1)
之前一直是在Python2.7环境下装的ipython,今天想在Python3环境下安装,主要是为了方便测试,按tab键可以补全,显示导入模块的方法. 1.首先安装Python3.6.1 wget h ...
- Ubuntu16.04双网卡配置,内网外网同时访问
Ubuntu16.04双网卡配置,内网外网同时访问 配置:vim/etc/network/interface auto lo iface lo inet loopback auto eno1 ifac ...
- java内存解析
ass BirthDate{ private int day; private int month; private int year; public BirthDate(int d;int m,in ...
- cordova linux 安装并编出第一个demo-android
cordova可以做到一次编写到处运行各个平台(android.ios.wp.bb.firefoxos.web等几乎所有平台) 手上只有一个android手机 ,安装的时候没有那么顺利,第一大问题就是 ...
- xtrabackup备份脚本
背景:现网环境全备份脚本:基于xtrabackup命令 #!/bin/sh # MySQL端口 PORT=' # 备份用户 USER='bkpuser' PAWD='bkpuser' Time=`da ...
- AD9361
AD9361框图 1. Fir滤波器的阶数为64或128 而内插或抽取因子为:1.2或4. HB1和HB2的内插或抽取因子为1或2而HB3的因子为1.2或3 BB_LPF为:三阶巴特沃斯低通滤波器 ...