博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 重载、覆盖、隐藏
阅读量:4289 次
发布时间:2019-05-27

本文共 1302 字,大约阅读时间需要 4 分钟。

C++ 重载、覆盖、隐藏

 

重载、覆盖和隐藏是C++中容易混淆的概念,作为C++研发人员有必要了解其区别和实现,以下结合概念和源码加以说明。

 

1、重载

重载指同一个类或者范围内,被声明的同名函数其参数数量或者类型不同,使用时根据函数参数列表确定调用哪个函数,需要注意的是重载不关注函数返回类型。

其特点:1)相同范围,2)函数名称相同,3)参数不同(类型或数量),4)virtual可有可无

代码:

#include 
using namespace std;class A{public: void fun(){ cout<<"(void)"<

 

2、覆盖

覆盖/重写指派生类的成员函数覆盖基类中同名函数,即当在子类中定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写(也称覆盖)了父类的这个虚函数。

特点:1)基类中被重写的函数必须为虚函数,2)重写在不同范围(基类和派生类),3)函数名和对应参数必须相同。

代码:

#include 
using namespace std;class A{public: virtual void fun1(){cout<<"A fun1"<
fun1(); pA->fun2(); pA->fun3(); B *pB = new C; pB->fun1(); pB->fun2(); pB->fun3(); return 0;}/* 输出:B fun1 //继承B的fun1,B重写A的fun1C fun2 //重写B的fun2A fun3 B fun1 C fun2 //重写B的fun2B fun3 */

 

3、隐藏

隐藏/重定义指派生类函数屏蔽基类中的同名函数,函数名称相同,不能构成覆盖的都视作为隐藏。

特点:1)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字,此时基类的函数被隐藏;2)如果派生类的函数与基类的函数同名,但是参数不同,此时,不论有无virtual关键字,基类的函数将被隐藏。

代码:

#include 
using namespace std;class A{public: void fun(int x){cout<
<
fun("Hello B1"); //pB1->fun(1);//error: invalid conversion from 'int' to 'const char*' B2 *pB2 = new B2; pB2->fun("Hello B2"); pB2->fun(22); C *pC = new C; pC->fun("Hello C"); //pC->fun(33);//error: invalid conversion from 'int' to 'const char*' return 0;}/* 输出Hello B1Hello B222 //由于隐藏B1/2不能调用fun(int),可通过在B2中重载使用该函数Hello C*/

 

转载地址:http://wflgi.baihongyu.com/

你可能感兴趣的文章
JavaScript null 和 undefined
查看>>
JavaScript 里的splice()与slice()
查看>>
Javascript替代eval方法
查看>>
Android开发UI布局必备基础知识
查看>>
程序员面试以及工作中真实问题汇编!
查看>>
浅谈java中的数学运算
查看>>
用大白话聊聊JavaSE
查看>>
Android 手把手带你玩转自定义相机
查看>>
仿墨迹天气的折线图控件,效果杠杠滴
查看>>
移动端防止被抓包
查看>>
Android异步批量压缩图片
查看>>
仿主流APP功能实现
查看>>
Java读取文件夹大小的6种方法及代码
查看>>
Java多线程中的10个面试要点
查看>>
Java面试经典,小题目大学问
查看>>
《程序员》:携程移动端 UI 界面性能优化实践
查看>>
Android指纹识别深入浅出分析到实战
查看>>
你们要的多数据库功能终于来了
查看>>
Android中实现微信本地视频发布到朋友圈功能
查看>>
非替代品,MongoDB与MySQL对比分析
查看>>