首页 > 代码库 > 函数重载和覆盖(重写)的区别

函数重载和覆盖(重写)的区别

1、重载:函数重载是指在同一作用域内(名字空间),可以有一组具有相同函数名,不同参数列表的函数;

2、覆盖(也叫重写):指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样;

3、隐藏:指派生类中的函数把基类中相同名字的函数屏蔽掉了,隐藏与另外两个概念表面上看来很像,很难区分,其实他们的关键区别就是在多态的实现上。

下面那种情形下myfunc函数声明是重载?A. namespace IBM{    int myfunc(int a);}namespace SUN{    int myfunc(double b);}B. namespace IBM{    int myfunc(int a);}namespace SUN{    using IBM::myfunc;    int myfunc(double b);}C. namespace IBM{    int myfunc(int a);    namespace SUN    {        int myfunc(double b);    }}D. class A{public:    int myfunc(int a);}class SubA: public A{public:    int myfunc(double b);}

答案是B,A和C都是名字空间不同;D是隐藏,只有B是重载!

 

存在如下声明:void f (); //全局函数class A{public: void f(int);};class B: public A{public: void f(int *); static void f(int **); void test(); //...};那么在如下B::test实现中哪几个函数调用是合法的:void B::test(){ int x = 0; int *p = NULL; f();    //(1) f(x);   //(2) f(&x);  //(3) f(&p);  //(4)};A.(1)(2)(3)(4) B.(1)(3)(4) C.(2)(3)(4) D.(3)(4)

答案是D,类成员函数重载:局部同名函数将隐藏而不是重载全局声明,不引入父类名字空间时子类的同名函数不会和父类的构成重载,静态成员函数可以和非静态成员函数构成重载

函数重载和覆盖(重写)的区别