• 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

      父类函数被覆盖

  • 相关阅读:
    SQL学习_WHERE 数据过滤
    SQL学习_SELECT
    读书笔记之_Win10 与Jmeter5.1.1界面兼容:
    appium+python搭建自动化测试框架_TestAPP框架(三)
    appium+python搭建自动化测试框架_Tools安装(一)
    总目录
    解决IntelliJ IDEA卡顿的方法
    SQL Server
    OBDC无法创建sql server连接
    常见问题
  • 原文地址:https://www.cnblogs.com/rednodel/p/9299894.html
Copyright © 2020-2023  润新知