第一部分 基本语言
基本上所有的语言都提供下列特征:内置数据类型,表达式和语句,变量,控制结构,函数
C++是 静态类型语言,在编译时执行类型检查,C++重要特征是类,程序员可以使用类自定义数据类型,类类型
C++标准库 利用内置类型、自定义类类型,实现了一个具有丰富类类型 和 相关函数的标准库
第二章 变量和基本类型
类型是所有程序的基础,类型告诉我们 数据代表什么意思 以及可以对数据执行哪些操作
C++语言,定义了几种基本类型:字符型、整形、浮点型等,还提供了可用于自定义数据类型的机制,还能修改已有的类型以形成复合类型
2.1. 基本内置类型
C++定义了一组 表示整形、浮点型、单个字符和布尔型的 算术类型,另外还定义了一种称为void的特殊类型(通常作为无返回值函数的返回类型,void类型没有对应的值)
8位的块作为一个字节(byte),32位或4个字节作为一个字(word),short类型为半个机器字长,int类型为一个机器字长,long类型为一个或两个机器字长,无符号型只能表示大于或等于0的数,所有的位都表示数值,把负值赋值给unsigned对象是完全合法的,其结果是 该负数 对该类型的取值个数 求模后的值,float型保证6位有效数字,double至少可以保证10位有效数字,char类型通常用来存储字符而不用于计算
2.2 字面值常量
定义字面值整数常量可以使用三种进制中的任一种:十进制、八进制、十六进制
定义长整型时字面常量,应该使用大写字母L,小写的很容易和数值1混淆,定义unsigned类型,在数值后加字母U
定义浮点字面常量,指数用E,加F表示单精度,加L表示双精度
布尔字面值:单词true 和 false
在一行的末尾加一反斜线符号可将此行和下一行当作同一行处理,反斜线符号必须是该行的尾字符,不允许其后面有注释或空格
2.3 变量
常常把 变量称为"变量" 或 "对象"(object),左值出现在赋值语句的左边或右边,右值只能出现在赋值的右边,对象就是内存中具有类型的区域,计算左值表达式就会产生对象
除了关键字,C++标准还保留了 一组标识符 用于标准库,标识符不能包含二个连续的下划线,也不能以下划线开头后面紧跟字一个大写字母,有些标识符不能以下划线开头
变量名一般用小写字母,多个词的标识符,每个词之间加一个下划线或每个内嵌的第一个字母都大写
初始化不是赋值,指创建变量并给它赋初值,赋值 则是 擦除对象的当前值并用新值代替
进行初始化的成员函数称为构造函数
在函数体外定义的内置类型变量都初始化成0,在函数体里定义的内置类型变量不进行自动初始化,建议每个内置类型的对象都要初始化
每个类最好有一个默认构造函数,没有默认构造函数的,每个定义都必须提供显式的初始化
2.3.5 变量的定义和声明
C++程序通常由许多文件组成,为了让多个文件访问相同的变量,C++区分了声明和定义
变量的 定义,用于为变量分配存储空间,还可以为变量指定初始值,变量必须且仅能定义一次,而且在使用变量之前必须定义或声明变量
声明 用于向程序表明变量的类型和名字,定义也是声明,当定义变量时声明了它的类型和名字,可以通过使用extern关键字声明变量名而不定义它,如果声明有初始化,那么它可以被当作是定义,即使声明标记为extern,只有当extern声明位于函数外部时,才可以含有初始化式
任何在多个文件中使用的变量 都需要有与定义分离的声明,在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)
局部变量屏蔽全局变量,通常把一个对象定义在它首次使用的地方是一个很好的办法
常量在定义后不能被修改,所以定义时必须初始化,如:const int bufSize = 512;
在全局作用域声明的 const 变量是定义该对象的文件的局部变量,如果const变量前面加上 extern ,整个程序都可以访问,如 extern const int bufSize = 512;
非const变量默认为extern,要使const变量能够在其他的文件中访问,必须显式的指定它为extern
2.5 引用
引用只是它绑定的对象的另外一个名字,当引用初始化后,只要该引用存在,它就保持绑定到初始化时指定的对象,不可能将引用绑定到另外一个对象
const 引用是指向const对象的引用,如:const int ival = 1024; const int &refVal = ival;,又如:const int &refVal = 1024;,const引用可以绑定到不同但相关的类型的对象或绑定到右值
2.7 枚举成员是常量
用来初始化枚举成员的值必须是一个常量表达式,如:enum Weapon { ARROW = 1, SWORD, BOMB },常量表达式是编译器在编译时就能够计算出结果的整形表达式,整形字面常量是常量表达式
枚举成员可以初始化枚举类型的对象,如:Weapon warriorWeapon = ARROW;
枚举成员值可以是不唯一的,不能改变枚举成员的值,枚举成员本身就是一个常量表达式,枚举类型的对象的初始化或赋值,只能通过其枚举成员或 同一枚举类型的其他对象来进行
2.8 类类型
默认情况下,struct 的成员为public,而class的成员为private,类定义了该类型的对象包含的数据 和该类型对象可以执行的操作 ,类体可以为空,类体定义了组成该类型的数据和操作,这些操作和数据是类的一部分,也称为类的成员,操作是成员函数 ,而数据则称为数据成员
2.9 预处理器的简单介绍
头文件应该含有保护符,即使这些文件不会被其他头文件包含,避免头文件包含多次
如:
#ifndef SALESITEM_H
#define SALESITEM_H
//...
#endif
每种类型 都定义了其存储空间要求 和可以 在该类型的所有对象上执行的操作,类型可以为const或非const
术语:access label(访问标号,如,public),arithmetic type(算术类型),direct-initialization(直接初始化),enumeration(枚举),enumerator(枚举成员),const reference(const引用),constant expression(常量表达式),escape sequence(转义字符),global scope(全局作用域),header guard(头文件保护符),implementation(实现),preprocessor(预处理器),liter constant(字面值常量),separate compilation(分别编译)