局部变量: ? 函数内定义的变量( 包括形参) ? 具有块作用域 可见性 ? 标识符先定义,后使用。 ? 在同一作用域,标识符不能同名。 ? 对于同名标识符,内层覆盖外层。 ? 全局变量的可见性始于定义点,结束于文件尾,如需访问其它文件中定义的全局变量,需用extern声明。 生存期 ? 静态生存期:与程序的运行期相同。 ? 动态生存期:进入作用域时分配存储空间,离开作用域时释放存储空间。 ?具有静态生存期的变量: ? 全局变量 ? 静态局部变量(static) ?具有动态生存期的变量: ? 局部变量 变量的存储类别 ? auto存储类:属于暂时性存储,需要时分配,用完后释放。 ? 局部变量、按值传递的形参 ? static 存储类:与程序同寿命,运行时即分配,结束时才释放。 ? 全局变量、静态的局部变量 ? register 存储类:直接使用通用寄存器,只适用于auto 类。 ? 是否分配取决于系统,现很少使用 程序对内存的使用情况 ? 代码区:可执行部分 ? 静态存储区:全局/静态变量 ? 栈(Stack):局部变量、函数参数 ? 堆(Heap):动态分配的变量(new/delete, malloc/free) ? 常量存储区:通常不允许修改 外部全局变量和静态全局变量 ? 外部全局变量:extern 全局变量 ? 需访问其它文件中定义的全局变量 ? 静态全局变量:static 全局变量 ? 限制访问本文件的全局变量
六、数组
大量数据的有效组织和访问。
什么是数组 ? 用于组织大量类型相同的数据 ? 一组变量的集合,具有以下特点:
? 变量名相同 ? 数据类型相同 ? 占用连续的存储空间 ? 数组中的每一个变量称为数组元素: ? 数组名+在数组中的位置(下标)
定义数组 类型说明符 数组名[ 常量表达式 ] ; 数组的存储规律 数组的初始化 数组的使用
查找算法:在数组中查找特定的元素 ? 线性查找: ? 对分查找: 二维数组
一般形式:
类型说明符 数组名[ 常量表达式 1] [ 常量表达式 2];
二维数组的存储方式 字符串与字符数组 字符串: ? 一系列字符作为整体处理 ? 字符串常量,例如:\? 用字符数组存放字符串 ? 字符串以'\\0'为结束标志 如何确定字符串的长度? 如何比较2个字符串大小?
七、指针
? 理解指针的基本概念 ? 用指针间接访问数据 ? 用指针间接访问函数 变量的访问形式 ? 直接访问:
? 按变量名访问 ? 函数内,全局变量
? 间接访问:
? 通过地址访问 ? 访问其它模块内的数据
变量地址、指针和指针变量 指针变量的定义、初始化 指针变量的访问 ? 相关运算符: &:取地址运算符 ,取得变量占用内存的起始地址 * :间接访问运算符,间接访问其所指向的变量 函数形参为指针变量 函数实参为变量地址
指针和数组:数组元素的访问即间接访问:
a[i] 等价于 *(a+i)
? 数组名:数组的起始地址 ? *(a+i):指针表示法访问数组元素 多维数组与指针 ? 以下几种形式等价:
b = a[i][j];
b = *(a[i]+j); b = *(*(a+i)+j); b = (*(a+i))[j];
二次间接访问:先定位行后定位列! 指针和字符串 函数指针 ? 访问函数的二种方式 ? 直接访问:函数名 ? 间接访问:函数指针变量 ? 函数指针 ? 函数的入口地址 ? 函数名表示函数的入口地址 定义指向函数的指针变量
数据类型 (*指针变量名) ( );
new/delete ? new运算符:动态分配内存,返回该内存的起始地址 ? delete运算符: 释放动态分配的内存
八、自定义数据类型
结构(structure)类型 ? 不同性质数据的组合 ? 结构类型变量 ? 相关变量的集合 ? 使用相同的名字 ? 数据性质不同 定义结构类型 struct 结构名{ 结构成员表列 }; 几点说明: ? 不是定义变量,而是数据类型 ? 结构成员 ? 可以是不同的数据类型 ? 可以是其它结构类型 ? 但不能是本结构类型 ? 可以是本结构类型的指针变量 定义结构类型变量
结构类型变量的初始化 ? 按成员逐个初始化: ? 用其它结构变量初始化: 结构变量的赋值 结构变量的访问
直接访问:使用点运算符(.) 间接访问:使用指向运算符(->)
枚举类型
枚举(enumeration): ? 用标识符表示一组整数常量
? 枚举常量的值将自动设置 ? 其值 自动从0 开始,以后逐个增1 ? 其值也可以用 '=' 显式指定 ? 常量名必须是唯一的、不得重复 定义枚举类型 ? 例:
enum Month { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};
? enum :定义枚举类型的关键字 ? Month :枚举类型名 ? 枚举常量:JAN, FEB, MAR,… ? 通常采用大写 ? 被设置为 1到12的整数 ? 一般形式: enum 枚举名{枚举元素表列}; 定义枚举变量 ? 只能用枚举常量赋值,不能用整数赋值:
typedef ? 定义已有数据类型的别名 ? 但不能创建新的数据类型 ? 别名通常采用第1个字母为大写,其余为小写 ? 用类型别名声明变量
九、面向对象程序设计——封装性
? 面向对象编程思想 ? C++如何实现封装性 ? 分类思想:定义类 ? 类的实例化:对象 ? 三大特性:封装性、继承性、多态性 ? 内部数据/函数:private成员 ? 外部接口:public成员
关于对象 ? 现实世界由各种对象组成! ? 对象具有:
? 属性 (状态) – 对象的特性 ? 行为 (功能) – 动作
三大特性:封装性、继承性、多态性 关于类 ? 分类——人类通常的思维方法 ? 分类的原则: ? 忽略事物的非本质特征,只注意事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。 ? 例如:学生类、教师类、树木类、复数类、字符串类等 类和对象 ? 类是许多对象的抽象,对象是类的一个实例
类定义的一般形式
class 类名称 {
访问权限:
成员 函数// 对象的行为
访问权限:
数据 成员// 对象的属性 };
类作用域 ? 简称类域: ? 类定义大括号内范围 ? 类域内成员可以直接访问 ? 类域外的函数无法直接访问类域内成员,只能通过类对象访问其公有成员 ? 类域小于文件域,但大于块作用域 类成员的访问权限 class 类名称 {
public:
公有成员 (外部接口) private:
私有成员 protected:
保护成员 };
公有成员: ? public后声明的成员 ? 类与外部的接口 ? 类域外函数可以通过对象访问 私有成员: ? private后声明的成员 ? 只允许本类的成员函数访问 ? 类外函数不能访问,除非是友元 保护类型: ? 对外与private相同 ? 对其派生类与public相同 ? 通常用于类的继承 数据成员: ? 在类内定义的变量 成员函数: ? 属于类的函数 ? 通常: ? 在class内 给出函数原型 (函数声明) ? 在class外 给出函数的实现(函数定义)
成员函数实现:使用作用域运算符 ::
定义对象 ? 形式:
类名 对象名; 访问对象
? 一般形式:
对象名.公有成员名;
对象的初始化 ? 利用构造函数:
? 特殊的成员函数,函数名与类名相同 ? 实例化对象时自动调用 ? 初始化对象中的数据成员 ? 没有返回值 默认构造函数 ? 对没有指定初始值的对象初始化 ? 实现方法: ? 无参构造函数 ? 带默认参数值的构造函数 ? 一个类只能有一个默认构造函数
对象的清理(善后)工作 ? 析构函数
? 特殊函数,函数名:~ 类名 ? 对象删除时自动调用 ? 用于对象删除前的清理工作 ? 没有参数,没有返回值 ? 每个类只能有一个析构函数