C++ 的继承复杂, 在上一章中讲解了基础部分
在用的时候不妨会想到: 如果在派生类中重载了基类的函数呢?
那么这就是本篇要讲的----继承的多态性.
百度百科 中对继承的多态性有详细的解释:
多态性就是多种表现形式,具体来说,可以用"一个对外接口,多个内在实现方法"表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。
C++的多态性:在基类的函数前面加上 virtual 关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。父类被标有 virutual 的函数称为: 虚方法.
在子类中重载基类的函数只要在父类函数声明部分加上 override 关键字即可.
再说白一点, 也就是将父类某函数的功能替换掉了, 但是函数的 '外观' 没有变:
#include <iostream> class Father { public: virtual void get() // 创建了一个虚方法 { std::cout<<"Father"<<std::endl; } }; class Child: public Father { public: virtual void get() override // 重写方法 { std::cout<<"Child"<<std::endl; } }; int main() { Father father; Child child; father.get(); child.get(); return 0; }
输出:
Father
Child
实践得出: child 正确地重载了父类的 get 虚方法
本文讲解了多态的一般情况, 有些人可能发现: 貌似不加 virtual 或 override 也可重载, 注意:
如果想重载父类的方法, 却在子类中并未使用 virtual 或者 override ( 二者缺一不可 ), 在很多情况之下会出现严重的错误
来源:https://www.cnblogs.com/tweechalice/p/12253753.html