多态2
多态
注:部分知识点在上一篇文章里有写,这篇文章未上一篇文章的续篇
纯虚函数
在animal类中,我们会发现在实际开发中父类的cry函数没有任何作用,在实际开发中永远不会用到,如果直接用普通虚函数,可能会造成两个问题
- 编译器允许创建animal这一对象,这在逻辑上没有任何意义
- 写无意义的代码,造成代码冗余
而纯虚函数就是为了解决这一问题而出现的
虚函数的核心作用
- 声明此函数为抽象函数,无法被调用
- 强制子类重写该函数
虚函数语法:
1. 使用virtual函数修饰
2. 后面加=0
class Animal {
public:
// 纯虚函数:只有声明,无实现,强制子类重写cry()
virtual void cry() = 0;
};
抽象类
定义:包含至少有一个纯虚函数的类
抽象类的核心特征
- 抽象类不能直接实例化(创建对象)
animal a; //报错:函数animal是纯虚拟函数
- 抽象类的指针可以正常指向子类成员,触发多态,这也是抽象类的唯一用途
dog p1;
animal* p1 = &a;
p1->cry();
- 子类必须重写父类的所有纯虚函数,但凡有一个没有重写,子类也会变成纯虚函数

浙公网安备 33010602011771号