C++中的重载、重写、隐藏三者的区别

一、基本概念

1、重载:

它是指同一访问区内被声明的几个具有不同参数列(类型、个数、顺序)的同名函数,根据参数列表确定调用哪个函数,不关心函数的返回类型。
例子:

class A {
  public:
    void test(int i);
    void test(double d);  //overload
    void test(int i, double d);  //overload
    void test(double d, int i);  //overload
    int test(int i);  //错误,非重载,注意重载不关心函数的返回类型
};

2、重写(覆盖):

它是指派生类中存在重新定义的函数,其函数名、参数列表、返回值类型,所有的都必须与其基类中被重写的函数一致,只有函数体不同。重写的基类中被重写函数必须有virtual修饰。

3、隐藏:

它是指派生类的函数屏蔽了其基类中的与之同名函数,只要函数名相同,不管参数列表和返回值类型,基类函数都会被隐藏。

4、重载与重写的区别:

(1)、范围区别:

重写和被重写的函数在不同的类中,重载和被重载的函数在同一类中。

(2)、参数的区别:

重写与被重写的函数参数列表一定相同,而重载与被重载的函数参数列表一定不同。

(3)、virtual的区别:

重写的基类必须要有virtual修饰,而重载与被重载函数可有可无virtual修饰。

5、隐藏与重写、重载的区别:

(1)、与重载范围不同:

隐藏函数和被隐藏函数在不同类中。

(2)、参数的区别:

隐藏函数和被隐藏函数参数列表可以相同,也可以不同,但函数名一定相同;当参数不同时,无论基类中的函数是否被virtual修饰,基类函数都是被隐藏,而不是重写。

参考文献:
https://www.cnblogs.com/zhangjxblog/p/8723291.html

你可能感兴趣的:(C++中的重载、重写、隐藏三者的区别)