面向对象编程(OOP)的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型与数据匹配。
内置的C++类型分为两组:基本类型和复合类型。
基本类型就是整数和浮点数。
程序通常都需要储存信息。因此必须记录是哪个基本属性:
信息将要储存在什么位置,要存什么值,储存何种类型的值。
整型:short int long 和long long
short至少16位
int至少和 short 一样长
long至少32位,且至少和 int 一样长。
long long 至少64位,且至少和 long一样长。
C++有一种更好的创建符号常量的方法(使用关键字const),所以不会经常使用#define
然而,有些头文件尤其是那些被设计成可用于C和C++中的头文件,必须使用#define。
如果不对函数内部定义的变量进行初始化,该变量将是不确定的,这意味着该变量的值将是它被创建之前,相应内存单元保存的值。
无符号整型:
要创建无符号版本的基本整型,只需使用关键字unsigned来修改声明即可。
unsigned short
unsigned int
unsigned long
unsigned long long
unsigned a(这是因为unsigned本身是unsigned int 的缩写)
整型变量的行为就像是里程表,如果超越了限制,其值将为范围另一端的取值。
如果节省内存很重要,则应使用short而不是使用int ,即使他们的长度是一样的。
例如:假设要将程序从int为16位的系统移int位32位的系统,则用于储存int数组的内存量将加倍,且short数组不受影响。
对于十六进制数,字符a~f和A~F表示了十六进制位,对应于10~15。
下面介绍最后一种整型,char类型。
char类型是专门为了储存字符而设计的。
C++对字符使用单引号,对字符串使用双引号。
ASCII系统中对应的情况:
A对应为65
a对应为97
有些字符不能直接通过键盘输入到程序中,例如,按回车键不能使字符串包含一个换行符:相反,程序编辑器把这种键击解释为在源代码中开始新的一行。
其他一些字符也无法从键盘输入,因为C++语法的娱乐他们特殊的含义。
对于这些字符C++提供了一种特殊的表示方法,转义序列。
\a表示振铃字符,它可以使终端扬声器振铃。
在可以使用数字转义序列或者符号转义序列时,应使用符号序列。数字表示与特定的编码方式相关。而符号表示适用于任何编码方式,其可读性也更强。
signed char和unsigned char
与int不同的是,char在默认情况下既不是没有符号,也不是有符号。是否有符号由C++实现决定。
如果讲char用作数值类型,则unsigned char 和signed char中间的差异将非常重要。
unsigned char 类型的表示范围通常为0~255。而signed char 的表示范围为-128~127。
程序需要处理的字符集可能无法用一个8位的字节表示。这时,C++的处理方式有两种。
首先: 如果大型字符集是实现的基本字符集,则编译器厂商可以将char定义为一个16位的字节或者更长的字节。
第二:一种实现可以同时支持一个小型基本字符集和一个交大的扩展字符集。8位char可以表示基本字符集。另一种类型wchar_t(宽字符类型)可以表示扩展字符集。它有足够的空间。可以表示系统使用的最大的扩展字符集。
cin和cout将输入和输出看做是char流,因此不适用于处理wchar_t类型。
此时可以用wcin和wcout来处理。
bool类型
它的值可以是true或者是false。
const限定符
创建常量的通用格式如下:
const type name = value;
如果在声明常量时没有提供值,则该常量的值时不确定的,且无法被修改。
const为什么比#define好?
首先,它能够明确指定类型。其次,可以使用C++的作用域将定义限制在特定的函数或文件中,(作用域规则描述了名称在各种模块的可知程度)。第三,可以将const用于更复杂的类型。
浮点数
它们是C++的第二组基本类型。浮点数能够表示带小数部分的数字。
计算机将值分为两部分储存,一部分表示值,一部分表示对值进行放大或者缩小。
两种书写浮点数的方式。
第一种标准小数点表示法,第二点E表示法。
d.dddE+n表示将小数点向右移动n位,而d.dddE~n表示将小数点向左移动n位。
之所以称为浮点数,就是因为小数点可以移动。
C++也有3种浮点类型:float double和long double 。这些类型是按它们可以表示的有效数位和允许的指数最小范围来描述的。
有效位是数字中有意义的位。通常,float 位32位,double为64位,long double 为80,96或者128。
通常cout会删除结尾的0
例如cout<<0。25000显示为0.25。调用cout.setf()将覆盖这种行为。
浮点数的优缺点。
浮点数优点:可以表示整数之间的值,其次由于有缩放因子,它们可以表示的范围大的多。
缺点:运算速度通常比整数慢,且精读将会降低。
C++运算符:
+-*/
%求模。
除法分支:
如果两个操作数都是整数,则c++将执行整数出发。这意味着结果的小数部分将被丢弃,使得最后的结果是一个整数。
类型转换:
将一种算数类型的值赋给离一中算数类型的变量时,C++将对值进行转换。
表达式中包含不容的类型时,C++将会对值进行转换。
将参数传递给函数时,C++将对值进行转换。
C++还允许通过强制类型转换机制显式的进行类型转换。
强制转换的通用格式如下:
(typename) value或者typename (value)。