在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。
因此:可以将虚函数改为纯虚函数。
纯虚函数语法:返回值类型 函数名 (参数列表)= 0;
类似一种声明。
当类中有了纯虚函数,这个类也称为抽象类。
抽象类特点:
- 无法实例化对象。
- 子类必须重写抽象类中的纯虚函数,否则子类也属于抽象类,也无法实例化对象。
无论在栈上,还是堆上,都无法实例化对象。
类似:《C#学习笔记(二十二)抽象类与开闭原则:抽象类和接口怎么来的?》中也规定:子类必须把抽象类中的虚函数实现。
对比一下C#:一样的操作。
纯虚函数和抽象类
class Base
{
public:
// 纯虚函数
virtual void func() = 0;
// 只要这个类有一个纯虚函数,这个类就是抽象类
// 抽象类特点:1、无法实例化对象;2、子类必须实现,否则子类也是抽象类。
};
只要这个类中有一个纯虚函数,这个类就是抽象类。
class Son :public Base
{
public:
virtual void func(){} // 空函数体也是重写。
};
多态实现:
void test01()
{
Base* base = new Son;
base->func();
delete base;
}