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对象 提供计数器,支持方便和快速的计数.返回的是一个以元素为键, ...
随机推荐
- javascript使用百度地图api和html5特性获取浏览器位置
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>&l ...
- zookeeper 监听事件 NodeCacheListener
zookeeper 监听事件 NodeCacheListener NodeCacheListener一次注册,每次监听,但是监听不到操作类型,不知道是增加?删除?还是修改? 1.测试类: packag ...
- iOS开发之CoreData数据存储
iOS开发之CoreData数据存储 参考资料:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreD ...
- java中数组以及集合
java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5] a是在java栈中分配的引用变量,类型是int[ ...
- C++ 第三十四天
c++ 已经搁了很久了,之所以捡起来是因为学校数据结构课程设置 **.我对 c++ 的掌握非常不扎实,因为除了顺序阅读 c++ primer 外就没有什么实践, 但是我又无法忍受自己写出来的 * 一样 ...
- Python3.x:定义一个类并且调用
Python3.x:定义一个类并且调用 1,定一个类Shrjj(其中有属性:name, jjzt,fbsjj,etf,lof,fjlof): class Shrjj(object): def __in ...
- 20145302张薇《Java程序设计》实验五报告
20145302张薇 实验五:Java网络编程及安全 实验内容 掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验要求 基于Java Socket实现安全传输 基于TCP实现 ...
- RocEDU.阅读.写作《苏菲的世界》书摘
我们在成长的过程当中,似乎失去了对这世界的好奇心.也正因此,我们丧失了某种极为重要的能力(这也是一种哲学家们想要使人们恢复的能力).因为,在我们内心的某处,有某个声音告诉我们:生命是一种很庞大的.神秘 ...
- 20145329《Java程序设计》第六周学习总结
教材学习内容总结 第十章 InputSream与OutputStream Java中,输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutputStr ...
- caffe平台快速搭建:caffe+window7+vs2013
caffe平台快速搭建:caffe+window7+vs2013 1.caffe-master下载 采用微软提供Windows工具包(caffe-master),下载地址:https://github ...