函数重载和覆盖(重写)的区别
重写 函数 区别 覆盖 重载
2023-09-14 09:11:58 时间
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,类成员函数重载:局部同名函数将隐藏而不是重载全局声明,不引入父类名字空间时子类的同名函数不会和父类的构成重载,静态成员函数可以和非静态成员函数构成重载。
相关文章
- 第八章·Nginx实现Rewrite重写
- 【说站】python中__new__的重写
- 【说站】java中方法重写的本质
- android取消toast_android重写toast
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 实现 GroovyInterceptable 接口 | 重写 invokeMethod 方法 )
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 )
- 为了生存重写软件!面对“缺芯”,特斯拉很慌
- WPJAM Basic 扩展 - Rewrite 优化:一键优化 WordPress 页面重写规则
- Redis AOF重写——提升性能的新方法(redisaof重写)
- 系统用Redis改进登录系统的机制(利用redis重写登陆)
- Redis读取缓慢重写策略提升效率(redis 读取缓慢)
- 光学电路可复写?新型纳米材料首度实现全光学技术重写波导
- 在ASP.NET中重写URL的代码
- asp.net下用url重写URLReWriter实现任意二级域名的方法
- asp.net用url重写URLReWriter实现任意二级域名
- 用类的继承关系(重写父类的方法)实现简易后台代码模板
- 探讨方法的重写(覆载)详解
- .net输出重写压缩页面文件的小例子