c++快速简易入门教程_008函数的覆盖和隐藏
2016-04-11 17:56
225 查看
这一节我们来学习函数的覆盖和隐藏的问题,这一节内容不是很难,但是一定要弄清楚,因为很重要!先上代码思考一下:
(1)基类函数必须是虚函数(使用virtual关键字进行声明)
(2)发生覆盖的两个函数分别位于派生类和基类中
(3)函数名称和参数列表必须完全相同
(1)派生类的函数与基类的函数完全相同(函数名和参数列表都相同),只是基类的函数没有使用virtual关键字。此时基类的函数将被隐藏,而不是覆盖。
(2)派生类的函数与基类的函数同名,但参数列表不同,这种情况下,不管基类的函数声明是否具有virtual关键字,基类的函数都将被隐藏。注意这种情况与函数重载的区别,重载发生在同一个类中。
#include <iostream> using namespace std; class Base{ public: virtual void xfn(int i){ cout << "Base::xfn(int i)" << endl; } void yfn(float f){ cout << "Base::yfn(float f)" << endl; } void zfn(){ cout << "Base::zfn()" << endl; } }; class SubClass :public Base{ public: void xfn(int i){ //覆盖了基类的xfn函数 cout << "SubClass::xfn(int i)" << endl; } void yfn(int c){ //隐藏了基类的yfn函数 cout << "SubClass::yfn(int c)" << endl; } void zfn(){ //隐藏了基类的zfn函数 cout << "SubClass::zfn()" << endl; } }; void main(){ SubClass sub; Base* pB = ⊂ SubClass *pSub = ⊂ pB->xfn(5); pSub->xfn(5); pB->yfn(3.14f); pSub->yfn(3.14f); pB->zfn(); pSub->zfn(); printf("hello...\n"); system("pause"); return; }运行结果:
SubClass::xfn(int i) SubClass::xfn(int i) Base::yfn(float f) SubClass::yfn(int c) Base::zfn() SubClass::zfn() hello... 请按任意键继续. . .解析:
1 函数的覆盖
构成函数覆盖的条件:(1)基类函数必须是虚函数(使用virtual关键字进行声明)
(2)发生覆盖的两个函数分别位于派生类和基类中
(3)函数名称和参数列表必须完全相同
2 函数的隐藏
所谓隐藏是指派生类中具有与基类同名的函数(不考虑参数列表是否相同),从而在派生类中隐藏了基类的同名函数。对于初学者很容易把函数的隐藏与函数的覆盖、重载相混淆,我们看下面两种函数隐藏的情况:(1)派生类的函数与基类的函数完全相同(函数名和参数列表都相同),只是基类的函数没有使用virtual关键字。此时基类的函数将被隐藏,而不是覆盖。
(2)派生类的函数与基类的函数同名,但参数列表不同,这种情况下,不管基类的函数声明是否具有virtual关键字,基类的函数都将被隐藏。注意这种情况与函数重载的区别,重载发生在同一个类中。
相关文章推荐
- c语言中的rewind函数,Win CE 不支持,可用fseek函数替换
- c++快速简易入门教程_007虚函数与多态性、纯虚函数
- 第3周 C语言及程序设计初步例程-46 小小型应用系统开发指导(一)
- c++创建txt文件,并写入内容
- C++作业3—本月有几天/定期存款利息计算器/个人所得税计算器
- c++标准模板库_联合容器_Bitsets详解
- c++标准模板库_容器适配器 _Queues(队列)详解
- c++标准模板库_容器适配器 _Stacks(堆栈)详解
- c++标准模板库_顺序结构_List详解
- c++标准模板库_顺序结构_Vectors详解
- c++迭代器Iterator详解
- c++指针详解
- c++实验3-个人所得税计算器
- c++快速简易入门教程_006继承
- cpptest 的安装和破解
- 已知三点坐标求外接圆方程和RANSAC算法的介绍,用C语言实现,其使用随机抽样一致性算法来求最合适圆时使用
- c++快速简易入门教程_005this指针
- c++快速简易入门教程_004函数的重载
- c++快速简易入门教程_003析构函数
- c++快速简易入门教程_002构造函数