C++学习记录-面向对象-虚函数纯虚函数抽象类
C++学习记录-面向对象-虚函数纯虚函数抽象类
一、虚函数的作用
先来创建一个类:
1 | class chara { |
再来一个类继承它:
1 | class qyn :public chara { |
进行调试:
1 | void test(chara& a) |
此处的test函数要求传入一个chara类的引用,但传入的是继承自chara类的qyn类
运行结果是调用了chara类的print函数而不是调用qyn类里的
想要让父类的引用或指针指向子类对象时能调用子类的函数,应使用虚函数
进行修改如下:
1 | class chara { |
1 | class qyn :public chara { |
将父类的print函数定义为虚函数,即在前面加上virtual
这样当父类的引用或指针指向子类对象时,也能调用子类重写的父类的函数
二、
-
虚函数是实现动态多态的机制
附:动态多态:即运行时的多态,在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法
-
动态多态的条件,一是要有继承关系,二是子类要重写父类的虚函数
-
虚函数的使用场景:父类指针或引用指向子类对象时
三、纯虚函数和抽象类
-
纯虚函数:
1
virtual void print()=0;
不写函数定义,只在后面写等于0,这个函数就变成了纯虚函数
-
抽象类:包含有纯虚函数的类就是抽象类
抽象类只能用于继承,不能用于实例化对象
子类继承自抽象类时,必须重写抽象类中的纯虚函数才可以用于实例化,否则它又是一个抽象类
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





