概念
当基类作为一个派生类的接口,而不希望使用基类创建对象时,类内的函数实现毫无意义。这时,我们可以将这个类内的方法声明为纯虚函数
- 当一个类内部包含了纯虚函数,那么这个类就是抽象类
- 抽象类不能用来创建对象
- 当继承了抽象类时,必须重写父类的纯虚函数(如果不重写父类的重虚函数,那么子类也抽象类,不能创建对象)
纯虚函数语法
class Demo
{
public:
//纯虚函数
virtual void func() = 0;
virtual ~Demo() = 0;
}
DemoL::~Demo()
{
}
Virtual void fun() = 0 告诉编译器在 虚函数表 中为函数保留一个位置,但在这个特定位置不放地址。
纯虚函数和虚函数的区别
- 虚函数有函数体
- 纯虚函数没实现
- 纯虚函数会将类变成抽象类
虚析构
问题:
多态发生时,如果通过父类指针去释放子类对象,默认只会调用父类的析构函数,可能会导致内存泄漏
解决方案:
将基类的析构函数写成虚析构
虚析构的作用
- 通过父类指针释放之类对象
纯虚析构
如果在类内定义的纯虚析构,就必须在类外实现纯虚析构
纯虚析构的作用
当类内部包含了虚函数时,又不想让类创建实例,可以将此类的析构函数写成纯虚析构(抽象类不能创造对象)