- 纯虚函数:没有函数体且初始化为0的虚函数,用来定义接口规范
- 抽象类(Abstract Class)
- 含有纯虚函数的类,不可以实例化(不可以创建对象)
- 抽象类也可以包含非纯虚函数
- 如果父类是抽象类,子类没有完全实现纯虚函数,那么这个子类依然是抽象类
class Animal {
virtual void speak() = 0;
virtual void walk() = 0;
};
多继承
- C++允许一个类可以有多个父类(不建议使用,会增加程序设计复杂度)
- 内存布局
多继承体系下的构造函数调用
class Student {
int m_score;
public:
Student(int score){
this->m_score = score;
}
};
class Worker{
int m_salary;
public:
Worker(int salary){
this->m_salary = salary;
}
};
class Undergraduate : public Student, public Worker{
public:
Undergraduate(int score, int salary): Student(score), Worker(salary){}
};
warning TODO
多继承-虚函数
如果子类继承的多个父类都有虚函数,那么子类对象就会产生对应的多张虚表
同名函数
同名成员变量
菱形继承
- 菱形继承带来的问题
- 最底下子类从基类继承的成员变量冗余、重复
- 最底下子类无法访问基类的成员,有二义性
虚继承
- 虚继承可以解决菱形继承带来的问题
- Person类被称为虚基类