zoukankan      html  css  js  c++  java
  • c++重载与重写的区别

    重载:是指在同一个作用域内(比如一个类内部),函数根据参数类型或者参数个数等有关函数参数的差异声明不同函数,不能只根据函数返回值重载函数,如:

    class Base {
    public:
        Base() = default;
        ~Base() = default;
    public:
        void function1()
        {
            printf("this is Base function1
    ");
        }
        virtual void function2()
        {
            printf("this is Base function2
    ");
        }
        int function3(int arg1, int arg2)
        {
            printf("this is Base functio3 %d, %d
    ", arg1, arg2);
        }
        int function3(char ch1, char ch2)
        {
            printf("this is Base functio3 %d, %d
    ", ch1, ch2);
        }
    };
    

    function3属于重载函数,虽然有两个function3但是两个函数参数类型不同。

    重写:是有关多态的一种类型,子类重写父类的虚函数,如:

    class Base {
    public:
        Base() = default;
        ~Base() = default;
    public:
        void function1()
        {
            printf("this is Base function1
    ");
        }
        virtual void function2()
        {
            printf("this is Base function2
    ");
        }
    };
    
    class Child : public Base {
    public:
        Child() = default;
        ~Child() = default;
    public:
        void function1()
        {
            printf("this is Child function1
    ");
        }
        virtual void function2()
        {
            printf("this is Child function2
    ");
        }
    };
    

    Child类的function2重写父类Base的function2.
    所以具体区别可以总结为:
    (1)范围区别:重载和被重载的函数在同一类中,重写和被重写的函数在不同的类中。
    (2)参数区别:重载和被重载的函数参数列表一定不同,重写与被重写的函数参数列表一定相同。
    (3)virtual的区别:重载函数和被重载函数可以被virtual修饰,也可以没有,重写的基类必须要有virtual修饰。

  • 相关阅读:
    ubuntu 启动 卡死在 clean ... file ... blocks
    realsense opencv example 运行时无显示退出
    realsense example 最简单编译
    python内置方法
    接口自动化测试框架
    git使用问题
    自动化测试工具原理
    四层协议网络传输
    字符串反转
    排除链接数性能瓶颈
  • 原文地址:https://www.cnblogs.com/wangdongfang/p/14391679.html
Copyright © 2011-2022 走看看