zoukankan      html  css  js  c++  java
  • C++多态性——函数的覆盖和隐藏

     

    1、函数的覆盖

    覆盖的条件:

    •  基类函数必须是虚函数(使用Virtual关键字进行声明);
    •  发生覆盖的两个函数必须分别位于派生类和基类中;
    •  函数名称与参数列表必须完全一样;

    2、函数的隐藏

    隐藏,是指派生类中具有与基类同名的函数(不考虑参数列表是否一样),从而派生类中隐藏了基类的同名函数

    隐藏的两种情况:

    ① 派生类的函数与基类的函数完全相同(函数名和参数列表都相同),只是基类的函数没有使用virtual关键字。

    ② 派生类的函数和基类的函数同名,但参数列表不一样,在这种情况下,不管基类的函数声明是否有virtual关键字,基类的函数都将被隐藏。(注意这种情况与函数重载的区别,重载发生在同一个类中)

    3、EXVC++深入详解p54

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class Base
     5 {
     6 public:
     7     virtual void xfn(int i)
     8     {
     9         cout << "Base::xfn(int i)" << endl;
    10     }
    11 
    12     void yfn(float f)
    13     {
    14         cout << "Base::yfn(float f)" << endl;
    15     }
    16 
    17     void zfn()
    18     {
    19         cout << "Base::zfn()" << endl;
    20     }
    21 };
    22 
    23 
    24 
    25 class Derived :public Base
    26 {
    27 public:
    28 
    29     void xfn(int i)              //覆盖基类的xfn函数
    30     {
    31         cout << "Derived::xfn(int i)" << endl;
    32     }
    33 
    34     void yfn(int c)               //隐藏基类的yfn函数
    35     {
    36         cout << "Derived::yfn(int c)" << endl;
    37     }
    38 
    39     void zfn()                  //隐藏基类的zfn函数
    40     {
    41         cout << "Derived::zfn()" << endl;
    42     }
    43 };
    44 
    45 
    46 
    47 void main()
    48 {
    49     Derived d;
    50     Base *pB = &d;
    51     Derived *pD = &d;
    52 
    53     pB->xfn(5);
    54     pD->xfn(5);
    55     pB->yfn(3.14f);
    56     pD->yfn(3.14f);
    57     pB->zfn();
    58     pD->zfn();
    59 }

    运行结果:

    注意:函数的覆盖是发生在派生类和基类之间,两个函数必须完全相同,并且都是虚函数。不属于这种情况的,都是隐藏。

  • 相关阅读:
    Resin4 自定义端口
    设备系统识别,解决方案。
    Reactjs-JQuery-Vuejs-Extjs-Angularjs对比
    HTML页面的加载
    传输层协议TCP和UDP
    常用的14种HTTP状态码速查手册
    前端总结·基础篇·CSS(二)视觉
    前端总结·基础篇·CSS(一)布局
    AngularJS 中的Promise --- $q服务详解
    ngRoute 和 ui.router 的使用方法和区别
  • 原文地址:https://www.cnblogs.com/mzct123/p/4822057.html
Copyright © 2011-2022 走看看