多态2

多态

注:部分知识点在上一篇文章里有写,这篇文章未上一篇文章的续篇

纯虚函数

在animal类中,我们会发现在实际开发中父类的cry函数没有任何作用,在实际开发中永远不会用到,如果直接用普通虚函数,可能会造成两个问题

  1. 编译器允许创建animal这一对象,这在逻辑上没有任何意义
  2. 写无意义的代码,造成代码冗余

而纯虚函数就是为了解决这一问题而出现的

虚函数的核心作用

  1. 声明此函数为抽象函数,无法被调用
  2. 强制子类重写该函数

虚函数语法:

1. 使用virtual函数修饰
2. 后面加=0

class Animal {
public:
    // 纯虚函数:只有声明,无实现,强制子类重写cry()
    virtual void cry() = 0;
};

抽象类

定义:包含至少有一个纯虚函数的类

抽象类的核心特征

  1. 抽象类不能直接实例化(创建对象)
animal a;    //报错:函数animal是纯虚拟函数
  1. 抽象类的指针可以正常指向子类成员,触发多态,这也是抽象类的唯一用途
dog p1;
animal* p1 = &a;
p1->cry();
  1. 子类必须重写父类的所有纯虚函数,但凡有一个没有重写,子类也会变成纯虚函数
posted @ 2026-02-05 14:18  努力的小xu  阅读(4)  评论(0)    收藏  举报