纯虚函数、抽象类、多继承、菱形继承、虚继承、虚基类

C++.png
  • 纯虚函数:没有函数体且初始化为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类被称为虚基类

你可能感兴趣的:(纯虚函数、抽象类、多继承、菱形继承、虚继承、虚基类)