4.用基类指针操作派生类数组
// 基类指针指向派生类数组
Parent *p = c;
Parent *p = c;
// 基类指针和派生类指针步长不一样,用基类指针操作派生类数组的时候会产生问题
//for (int i = 0; i < 5; i++)
// p[i].show();
double *pd = (double*)1000;
double *p1 = pd + 1;
int p2 = (int)pd + 1;
printf ("p1 = %d, p2 = %d\n", p1, p2);
double *p1 = pd + 1;
int p2 = (int)pd + 1;
printf ("p1 = %d, p2 = %d\n", p1, p2);
5.纯虚函数
// 纯虚函数: 一个虚函数,在函数声明后加上 = 0,没有函数定义
virtual double getS() = 0;
// 抽象类:拥有纯虚函数的类
// 特点:
// 1、抽象类不能实例化对象,但是定义对象指针 =====> 用来操作派生类对象
// 2、如果一个类,继承了抽象类,那么这个类必须实现抽象类的所有纯虚函数
// 如果有一个纯虚函数没有,那么这个派生类就会变成一个抽象类
// 抽象类:拥有纯虚函数的类
// 特点:
// 1、抽象类不能实例化对象,但是定义对象指针 =====> 用来操作派生类对象
// 2、如果一个类,继承了抽象类,那么这个类必须实现抽象类的所有纯虚函数
// 如果有一个纯虚函数没有,那么这个派生类就会变成一个抽象类
6.接口
// 用抽象类模拟接口: 抽象类中只有纯虚函数,没有成员变量和其他函数
// 多继承可以通过单继承和继承多个接口来代替
// 继承多个接口不会产生二义性,因为在派生类中虚函数在虚函数表中只有一个,虚函数唯一, 在调用的时候不会产生二义性
// 多继承可以通过单继承和继承多个接口来代替
// 继承多个接口不会产生二义性,因为在派生类中虚函数在虚函数表中只有一个,虚函数唯一, 在调用的时候不会产生二义性
class interface_add
{
public:
virtual void add() = 0;
virtual void show() = 0;
};
{
public:
virtual void add() = 0;
virtual void show() = 0;
};
class interface_mul
{
public:
virtual void mul() = 0;
virtual void show() = 0;
};
{
public:
virtual void mul() = 0;
virtual void show() = 0;
};