面向对象编程(OOP)的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型与数据匹配。在创建自己的类型之前必须先了解C++内置的类型。
内置的C++类型分为两组:基本类型和复合类型
简单变量
程序通常都需要存储信息,为把信息存储在计算机中,程序必须记录3个基本属性:
- 信息将存储在哪里
- 要存储什么值
- 存储何种类型的信息
int braincount;
braincount = 5;
这两行语句告诉程序,它正在存储整数,并使用名称braincount来表示该整数的值(为5)。实际上程序将找到一块能够存储整数的内存,将该内存单元标记为braincount,并将5复制到该内存单元中;然后就可以在程序中使用braincount来访问该内存单元
变量名
必须遵循的几种简单的C++命名规则
- 在名称中只能使用字母字符、数字和下划线(_)
- 名称的第一个字符不能是数字
- 区分大写字符与小写字符
- 不能将C++关键字用作名称
- 以两个下划线打头或以下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符
- C++对名称的长度没有限制,但有些平台有长度限制
如果想使用两个或更多的单词组成一个名称,通常的做法是用下划线将单词分开(如my_onion)
整型
整型就是没有小数部分的数字。C++的基本整形分别为char、short、int、long、long long,每种类型都有有符号版本和无符号版本,因此共有10种类型
计算机内存由一些叫做位(bit)的单元组成,C++的short、int、long和long long类型通过使用不同数目的位来存储值。C++提供了一种灵活的标准,它确保了最小长度
- short至少16位
- int至少与short一样长
- long至少32位,且至少与int一样长
- long long 至少64位,且至少与long一样长
可以像使用int一样,使用这些类型名来声明变量:
short score;
int temperature;
long position;
long long number;
short 是 short int的简称,long是long int的简称
sizeof运算符返回类型或变量的长度,单位为字节
头文件climits定义了符号常量来表示类型的限制
如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。这意味着该变量的值将是它被创建之前,相应内存单元保存的值。
无符号类型
前面介绍的几种类型都有一种存储负数值的无符号变体,其优点是可以增大变量能够存储的最大值,例如short表示的范围为-32768~+32767,而无符号版本则表示的范围是0~65535。要创建无符号版本的基本整型,只需使用关键字unsigned来修改声明即可(unsigned是unsigned int的缩写):
unsigned short change;
unsigned int rovert;
unsigned long gone;
unsigned long long abc;
整型变量的行为就像里程表。如果超越了限制,其值将为范围另一端的取值(如下图)。C++确保了无符号类型的这种行为;但不保证符号整型超越限制(上溢和下溢)时不出错,而这正是现实中最常见的行为。
const限定符
符号名称指出了常量表示的内容,另外如果程序在多个地方使用同一个常量,则需要修改该常量时,只需修改一个符号定义即可。C++有一种更好的处理符号常量的方法,就是使用const关键字来修改变量声明和初始化
const type name = value;
应在声明中对const进行初始化
浮点数
浮点数能够表示带小数部分的数字,比如3.6,3.1415926这样的数字。计算机将这样的值分成两部分存储,一部分表示值,另一部分用于对值进行放大或缩小
书写浮点数
C++有两种书写浮点数的方式。第一种是使用常用的标准小数点表示法:
12.34
9356.23
8.0
即使小数部分为0,小数点也将确保该数字以浮点格式(而不是整数格式)表示
第二种表示浮点值的方法叫E表示法,如
3.45E6
表示的是3.45与1000000相乘的结果,E6指的是10的6次方。6被称为指数,3.45被称为尾数
E表示法确保数字以浮点格式存储,即使没有小数点。(可以用E也可以用e,指数可以是正数也可以是负数)。但是数字中不能有空格,7.3 E6就是非法的。
指数为负意味着除以10的乘方,8.3E-4表示8.3/10^4
浮点类型
C++有3种浮点类型:float、double和 long double。这些类型是按它们可以表示的有效数位和允许的指数最小范围来描述的。
与整数相比,浮点数有两大优点。一是他们可以表示整数之间的值,其次由于有缩放因子,它们可以表示的范围大得多。最后,浮点运算的速度通常比整数运算慢,且精度将降低。
C++算术运算符
下面是5种基本的C++算术运算符
- + 运算符对操作数执行加法运算
- - 运算符从第一个数中减去第二个运算数
- * 运算符将操作数相乘
- / 运算符用第一个数除以第二个数。如果两个操作数都是整数,则结果为商的整数部分,小数部分被丢弃;如果其中有一个(或两个)操作数是浮点数,则小数部分将保留,结果为浮点数
- % 运算符求模。它生成第一个数除以第二个数后的余数。两个操作数都必须是整型,将该运算符用于浮点数将导致编译错误
对于float,C++只保证6位有效位
类型转换
C++自动执行很多类型转换
- 将一种算术类型的值赋给另一种算术类型的变量时,C++将对值进行转换;
- 表达式中包含不同的类型时,C++将对值进行转换;
- 将参数传递给函数时,C++将对值进行转换;