一、抽象基类
1、子类不析构
AbstractCalculator *abs = new AddCalculator;
delete abs; //单纯delete,调用析构
.
2、子类析构(抽象基类,虚析构)
Animal* animal = new Cat( "花花" );
delete animal; //delete animal时,会调用animal的析构函数
( //而且子类Cat,存在在堆区开辟空间情况 )
//将animal声明为虚析构,则会调用子类Cat析构
//从而在子类Cat中,把堆区的那块内存释放了
.
二、文件判断
1、文件是否为空
char ch;
ifs>>ch;
if( ifs.eof() )
{
cout << "文件为空" << endl;
}
2、统计文件人数
假定文件保存内容为Person
Person类有三个属性:int m_Num、string m_Name;、int DeptId
while (ifs >> num && ifs >> name && ifs >> deptId)
{ //对应的三个数据类型读完,就算一个职工
num++;
}
三、多态
1、抽象基类指针
Woker* woker = new Employee(1, "张三", 1);
woker->showInfo();
delete woker;
woker = new Boss(1, "李四", 3); //delete之后,指向新空间
woker->showInfo();
delete woker;
woker = new Manager(1, "赵六", 2);
woker->showInfo();
delete woker;
woker不能多次定义,多次初始化
delete指向的内容,但本身未改变,可以指向新空间
2、存储基类指针数组
(1)、抽象类指针
Woker* woker = NULL;
woker = new Employee(1, "张三", 1);
(2)、存储抽象类数组的指针
Woker** m_EmpArray = NULL;
m_EmpArray[ i ] = woker; // p[ i ] ==
m_EmpArray = new Woker*[Num]; //p ==
3、类:声明普通类型和指针类型
(1)、声明为普通类型,不必考虑NULL问题 和 后续指向问题
WokerManager wm;
wm.show();
(2)、声明为指针类型,要先赋值NULL,防止称为野指针
后续要有新指向才能使用,否则提示访问非法内容
Woker* woker = NULL;
woker = new Employee(1,"张三",2); 、//指向由NULL改变了