C++ 继承的多态性: 重载父类函数(虚方法)

社会主义新天地 提交于 2020-02-07 21:49:42

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 ( 二者缺一不可 ), 在很多情况之下会出现严重的错误

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!