• C++中的覆盖与隐藏(详细讲解)


    C++类中覆盖与隐藏一直是一个容易理解出错的地方,接下来我就详细讲解一下区别在何处

    覆盖指的是子类覆盖父类函数(被覆盖),特征是:

    1.分别位于子类和父类中

    2.函数名字与参数都相同

    3.父类的函数是虚函数(virtual)

    隐藏指的是子类隐藏了父类的函数(还存在),具有以下特征:

    子类的函数与父类的名称相同,但是参数不同,父类函数被隐藏

    子类函数与父类函数的名称相同,参数也相同,但是父类函数没有virtual,父类函数被隐藏

    class father
    {
    public:
        void show1()
        {
            cout << "father::show1" << endl<< endl;
        }
    
        virtual void show2()
        {
            cout << "father::show2" << endl << endl;
        }
    };
    
    class son:public father
    {
    public:
        void show1()
        {
            cout << "son::show1" << endl<< endl;
        }
    
        virtual void show2()
        {
            cout << "son::show2" << endl << endl;
        }
    };
    
    int main()
    {
      father f;
      son s;
    
      father *pf=&s;
      son *ps=&s;
    
      pf->show1();
      pf->show2();
      
      return 0;
    }

    因为show1是非virtual函数,调用它的对象类型为静态类型即父类(静态联编),所以调用的是父类的对象

    但是show2为virtual函数,调用它的对象类型为动态类型即指针指向的类型(动态联编),所以调用的是子类的类型

    IF 子类的函数与父类的名称相同,但是参数不同

      父类函数被隐藏

    ELSE IF 子类函数与父类函数的名称相同&&参数也相同&&但是父类函数没有virtual

      父类函数被隐藏

    ELSE IF 子类函数与父类函数的名称相同&&参数也相同&&但是父类函数有virtual

      父类函数被覆盖

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood(度序列构图)
    poj1236
    poj1236
    有向图求强连通分量
    有向图求强连通分量
    zoj 2532(Internship )找割边
    zoj 2532(Internship )找割边
    Expedition POJ
    2016年第七届蓝桥杯C/C++ B组国赛 —— 第四题:机器人塔
    2016年第七届蓝桥杯C/C++ B组国赛 —— 第四题:机器人塔
  • 原文地址:https://www.cnblogs.com/rednodel/p/9299894.html
Copyright © 2020-2023  润新知