要想学习并掌握一种编程语言,理解其语法特征的实现细节是第一步。比如最基本的特征就包括:
- 整型、字符型等内置类型。
- 变量,用来为对象命名
- 表达式和语句,用来操纵上述数据类型的具体值
- if和while等控制结构,这些结构允许我们有选择的执行一些语句或者重复的执行一些语句。
- 函数,用来定义可供随时调用的计算单元。
我们可以通过两种方式来我们所编程序的基本特征:一是赋予程序员自定义数据类型的权利来实现对语言的扩展。二是将一些有用的功能封装成库函数提供给程序员(python)。
在C++中,其对象类型已经决定了能对这个对象进行的操作,一条表达式是否合法依赖于其中参与运算的对象的类型。C++自身提供了一些内置数据类型,一些运算操作符,几种程序流控制语句,但是却能编译出强大的系统程序。
C++中最重要的语法特征就是类,通过类,程序员可以定义自己的数据类型,为了与内置类型相区分,将其称为类类型。新类型中既可以包含数据类型,也可以包含函数成员。我们要学会构建自己的类。
第二章 变量和基本类型
数据类型是程序的基础,它告诉我们数据的意义以及我们能在数据上执行的操作及其操作意义。
2.1 基本内置类型
分为算数类型和空类型
算数类型分成了两类:整型(包括字符和布尔类型)和浮点型。
C++中,浮点型可表示单精度,双精度和扩展精度值。除去布尔型和扩展的字符型之外,其他整型可以划分为带符号的(signed)和无符号(unsigned)的两种。带符号类型可以表示正数,负数和0,无符号类型则仅能表示大于等于0的值。比如说,类型int、short、long、longlong都是带符号的,在这些类型前添加unsigned就可以得到无符号类型,例如unsigned int(可以缩写为unsigned)。
字符型被分为了三种:char、signed char 和unsigned char
NOTE:如何选择类型
- 当明确知晓数值不可能为负时,选用无符号类型。
- 使用Int执行整数运算
- 在算术表达式中不要使用char或者bool,只有在存放字符或者布尔值时才使用它。
- 执行浮点数运算选用double。
2.1.2 类型的转换
对象的类型定义了对象能包含的数据和能参与的运算,其中一种运算被大多数类型支持,就是将对象从一种给定的类型转换为另一种相关类型。
bool b = 42; // b为真
int i = b ; // i的值为1
i = 3.14; // i 的值为3
double pi = i; //pi 的值为3.0
unsigned char c = -1 ; //假设char占8比特,c的值为255
signed char c2 = 256; //假设char占8比特,c2的值是未定义的
类型所能表示的值的范围决定了转换的过程:
- 当我们把一个非布尔型的算数值赋给布尔类型时,初始值为0,则结果为false,否则结果为true
- 当我们吧一个布尔值赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1.
- 当我们把一个浮点数赋给整数类型时,进行了近似处理。结果值将仅仅保留浮点数中的整数部分。
- 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
- 当我们赋给带符号类型一个超出它表示范围的值时,结果时未定义的。
2.1.3 字面值常量
一个形如42的值被称作字面值常量,这样的值一望而知,每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型。
整型字面值:十进制、八进制、十六进制。
字符和字符串面值:
'a' //字符字面值
"Hello,World!" //字符串字面值