c++编程入门3 数据类型
数据类型包括基本数据类型和自定义数据类型
基础数据类型包括:bool char short int long (long long) float double (long double)
自定义数据类型:枚举类型 结构类型 联合类型 数组类型 和 类
基本数据类型
1.大多数机器的字节由八个比特位构成,字则由4或8个字节构成
2.当我们赋给无符号类型一个超过它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数
unsigned char c = -1;//八比特大小的unsigned char 的表示范围为0-255 cout << (int)c << endl;// 255
//死循环 for (unsigned i = 10; i >= 0; i--){ cout << i << endl; }
3.可以将整形字面值写作十进制数、八进制数、十六进制数的形式。以0开头的整数代表八进制数,以0x或0X开头的代表十六进制数
浮点数字面值表现为一个小数或以科学计数法表示的指数,其中指数部分为用E或e标识,默认的浮点型字面值是double
字符和字符串字面值注意字符串字面值的长度要比它的内容多1,因为编译器在每个字符串的结尾处都添加一个空字符 '/0'
cout << 20 << endl << 024 <<endl<< 0x14 << endl; cout << 3.14159 << endl << 3.14159E0 << endl << 0. << endl << .001 << endl; cout << 'a' << '\n' << "string" << endl;
4.转义字符自行查找
泛化的转义序列 形式为\x后紧跟一个或多个十六进制数,或\后紧跟一个,两个或三个八进制数,其中数字部分表示的是字符对应的数值
如果反斜线\后面跟着的八进制数字超过3个,只有前3个数字与\构成转义序列
cout << char(77) << endl; cout << "Hi \x4dO\115!\n" << endl;//O115(八进制)=0X4d(十六进制)=77
5.指定字面值的类型
后缀:
U(u) unsigned
L(l)整型 long
LL(ll) long long
F(f) float
L(l)浮点型 long double
自定义数据类型
1.枚举类型
枚举属于字面值常量类型,在c++中包含两种枚举:限定作用域的和不限定作用域的
限定作用域的枚举类型的一般形式 关键字 enum class (或者等价的使用 enum struct)随后是枚举类型名字以及用花括号括起来的以逗号分隔的枚举成员列表
enum class open_modes{ input, output, append };
不限定作用域的枚举类型
enum color{ red, yellow, green };
未命名的,不限定作用域的枚举类型
如果enum是未命名的,则我们只能在定义该enum时定义它的对象,和类的定义类似。
enum { floatPrec = 6, doublePrec = 10, double_doubleprec = 10 } precision;
默认情况下枚举值从0开始,依次加一
想要初始化enum对象或者为enum对象赋值,必须使用该类型的一个枚举成员或者该类型的另一个对象
一个不限定作用域的枚举类型的对象或枚举成员可以自动的转换成整型,我们可以在任何需要整型值的地方使用它们
枚举类型的前置声明
enum intValues :unsigned long long;//不限定作用域的,必须指定成员类型 enum class open_modes;//限定作用域的枚举类型可以使用默认成员类型int
注意:
(1)枚举值是常量,不是变量。不能在程序中用赋值语句对其进行赋值。
(2)枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。
(3)只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量
2.联合类型union
1.联合(union) 是一种特殊的类。一个union可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值,分配给一个union对象的存储空间 至少要能容纳它的最大的数据成员
2.类的某些特性对union同样适用,但并非所有特性都如此。union不能含有引用类型的成员。在c++11新标准中,含有构造函数或析构函数的类的类型 也可以作为union的成员类型。union可以为其成员指定public、protected和private等保护标记,默认情况下union的成员是共有的,这一点与struct相同。
3.union可以定义包含构造函数和析构函数在内的成员函数,但是由于union既不能继承自其他类,也不能作为基类使用,所以在union中不能含有虚函数
匿名union
在匿名union的定义所在的作用域内该union的成员都是可以直接访问的,匿名union不能包含受保护的成员或私有成员,也不能定义成员函数
关于union的其他较难知识会在后续讲解
int a=20; { union{ int a; double b; char c; }; a = 15; cout << a << endl; } cout << a << endl;
2018-10-21