1.定义
在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数
实现多态性,通过指向派生类的基类指针或者引用,访问派生类中同名覆盖成员函数。
多态理解:
父类指针指向子类的实例,用父类的指针调用子类的成员函数。
使得父类的指针有多种形态,泛型技术 比如 :模板 虚函数
用不变的代码实现可变的算法 在编译时/运行时决定
2.纯虚函数
PS:虚函数&纯虚函数区别
定义虚函数是为了允许用基类的指针调用子类函数
PS:虚函数的“虚”
虚,体现在“动态联编”“推迟联编”,类函数的调用并不是在编译时刻,而是在运行时刻确定的。编写代码的时候并不能确定被调用的是基类的还是派生类的函数,称为虚函数
定义纯虚函数,代表函数没有被实现,为了实现一个接口,起到规范作用,规范继承这个类的程序员必须实现这个函数。
PS:纯虚函数定义
在基类中声明的虚函数,基类中无定义,但派生类要定义自己的实现方法。在函数原型后加=0;
virtual void function1() = 0;
PS: 纯虚函数作用
有些类别不适合生成对象,但其派生类适合 动物 猫科 犬科。编译器在派生类中必须重写实现多态性,含有纯虚函数的类 抽象类
3.特殊概念C++中没出现
接口
抽象类:只能被继承不能被实现
C++通过纯虚函数实现抽象类
类中只有纯虚函数是接口,所以接口是一种特殊的抽象类
2.应用
3.联系
虚函数
纯~
多态
动态绑定 静态~
多态性 将接口与实现分离
接口
友元类
virtual 与析构函数关系
virtual 基类 派生类都需要有吗
实现原理 虚函数表
link:
https://www.liaoxuefeng.com/wiki/1252599548343744/1260456371027744
https://www.runoob.com/w3cnote/cpp-virtual-functions.html