美文网首页我爱编程
C++之重定义、重载与重写

C++之重定义、重载与重写

作者: 你的社交帐号昵 | 来源:发表于2018-04-14 14:08 被阅读0次

    想要用好C++继承和类自身函数实现就必须了解C++得三个概念重定义(redefine)、重载(overload)、重写(override)。

    一、 基本感念

    1、 重定义(redefine)

    派生类对基类函数得重定义,派生类函数名与基类某函数同名。

    特点:

    (1)作用域不同,既一个在基类一个在子类中;

    (2)函数名相同;

    (3)参数列表、函数返回值无要求;

    特殊情况:若派生类定义的函数与基类的成员函数完全一样(名字、参数列表、返回值),且基类的该函数为virtual,则属于派生类重写基类的虚函数。

    C++之重定义、重载与重写

    2、 重载(overload)

    函数名相同,参数列表不同(参数类型、参数顺序),不能用返回值区分。

    特点:

    (1)作用域相同;

    (2)函数名相同;

    (3)参数列表必须不同,但返回值无要求;

    特殊情况:若某一重载版本的函数前面有virtual关键字修饰,则表示它是虚函数,但它也是重载的一个版本。

    作用效果:编译器根据函数不同的参数列表,将函数与函数调用进行早绑定,重载与多态无关,与面向对象无关,它只是一种语言特性。

    3 、覆盖(override)

    派生类重定义基类的虚函数,既会覆盖基类的虚函数(多态)。

    特点:

    (1)作用域不同;

    (2)函数名、参数列表、返回值相同;

    (3)基类函数是virtual;

    特殊情况:若派生类重写函数是一个重载版本,那么基类的其他同名重载函数将在子类中隐藏。

    作用效果:父类指针和引用指向子类的实例时,通过父类指针或引用可以调用子类的函数,这就是C++的多态。

    二、 代码实例

    三个类,一个基类,两个派生类,类定义和实现如下:

    View Code

    测试主程序:

    View Code

    详细的分析如注释。运行结果如下:

    C++之重定义、重载与重写

    三、C++学习交流

    小编推荐 :C/C++学习交流裙:七一零五二零三八一 (编号:灵狐 ,不填不会通过哦)

    不定时分享干货,包括2018最新的C/C++企业案例学习资料和零基础入门教程,欢迎自学的小白和大神一起来学习交流。

    四、 在C++11中可以指定不隐藏基类函数

    在C++11中层架 了using的用法可以在子类中指定不隐藏基类的函数。

    五、隐藏规则

    隐藏规则如下:

    (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。

    相关文章

      网友评论

        本文标题:C++之重定义、重载与重写

        本文链接:https://www.haomeiwen.com/subject/vjllkftx.html