标准C++复习
第二章 数据输入与输出
第三章C++基础
第四章 类与对象
第五章 继承
5.4派生类的构造函数只负责直接基类初始化
但虚拟继承中,存间接虚基类,须负责初始化
5.5单,多继承调用次序:基类--对象成员--派生类构造函数
5.6 class 派生类名:virtual [继承方式] 基类名1 ...{};
虚拟继承 解决命名冲突 使基类成员在派生类中只有一份备份
6.1 operator 运算符函数
不需要重载的运算符:= & . ->
6.2 类成员运算符重载:参数个数要比该运算符实际的参数少一个
一元运算符作为类成员函数重载时不需要参数
6.3 类的友元运算符重载 需要的参数与运算符的实际参数相同
重载二元运算符第一个参数,不会对类成员运算符函数进行任何隐式转换
6.5 ++,--:前缀运算符采用常规的重载方法,后缀运算符在运算符函数参数表中增加一个无用的形参
6.6重载=:防止指针悬挂 operator=
只能被重载为成员函数,不能被重载为友元,不能被继承
6.7 X& operator[](int n);//重载[]
可以检查数组大小,下标值是否越界,禁止为越界访问以建立安全的数组
为二元运算符 第一个参数为this,第二个为数组的下标
返回引用可以在赋值符的左边调用
只能重载为非静态成员函数,不能为友元和普通函数
6.8 虚函数 只有类的成员函数才能被定义为虚函数(类的非静态成员)
程序运行时才确定调用函数的功能 在派生类继承应用为虚函数
实现多态性需要通过基类指针或引用调用派生类对象
6.9不能为虚函数:构造析构函数,静态成员,内联函数等
6.10 dynamic_cast:基类必须是多态的,即基类必须至少有一个虚函数
6.11头文件typeinfo中:typeid(exp)
在程序运行时判定一个对象的真实数据类型
7.2.1 template<class T1,class T2,...>返回类型 函数名(参数表){...}
//不允许template语句与函数模板定义之间有任何其它语句
//为了区分,用typename代替class,它们是等价的
7.2.3 模板参数
//模板调用时进行参数类型的强制转换
//将参数的实际类型写在调用函数名后面一对<>中
//多个模板
//模板参数:1)类型参数:class,typename
//2)非类型参数:指某种具体的数据类型,不允许用浮点型、类 对象、void
7.3 template<class T1,class T2,...>class 类名{...}
//class可用typename代替
7.4 STL标准模板库:
1)容器container(类模板实现):顺序容器:vector,list,deque
关联容器:set,multiset,map,multimap
容器适配器:stack,queue
String
//less<数据类型>:默认,排序方式从小到大
//greater<数据类型>:从大到小排序
//set、map不允许元素重复,multiset、multimap允许
//make_pair(e1,e2);//构造map/multimap的<键,值>
//映射的迭代器数据成员:first访问键,second访问值
//map可用键作为数组下标访问元素,multimap不允许
- 迭代器iterator:一个对象,用来遍历容器,”取得下一个元素”
- 算法:STL大约提供了70个算法//include <algorithm>
//find(beg,end,value):查找指定数据在某个区间是否存在
//count(beg,end,value):统计某个值在指定区间出现的次数
//search(beg1,end1,beg2,end2):从一个容器查找由另一个容 器所指定的顺序值
//merge(beg1,end1,beg2,end2,dest):合并2个容器
//sort(beg,end):从小到大对元素排序
8.2 try用于监测可能发生的异常,throw抛出异常,catch捕获 并处理由throw抛出的异常
//try和catch块之间不能有其它语句
8.3 可以将产生异常的程序放在一个函数,检测处理异常的函数 代码放在另一个函数、
8.4 catch(...){}//3个点表示可以匹配任何异常类型
//有多个catch块,要放在最后面
//catch块可以再次抛出异常,块中添加不带任何参数的throw 语句