C++中覆盖、隐藏的区别
来源:互联网 发布:java replaceall 空格 编辑:程序博客网 时间:2024/05/17 07:06
基本规则:
1) 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。
2) 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。
事例代码:
/*************************************************************************** @Copyright (c) 2013, ChenMH, All rights reserved.* @file : main.cpp* @version : ver 1.0 * @author : ChenMH * @date : 2013/06/27 14:51 * @brief : 测试C++中覆盖、隐藏的区别。因重载比较简单,不再实验。**************************************************************************/#include <cstdio>class CBase{public:virtual void A(int ival){printf(" CBase::A() ");}void B(int ival){printf(" CBase::B() ");}void C(int ival){printf(" CBase::C() ");}};class CDerive : public CBase{public: virtual void A(int ival) //覆盖父类的A:函数名、参数完全相同,且父类一定要有virtual {printf(" CDerive::A() ");} void B(int ival) //隐藏父类的B:函数名、参数完全相同,且父类无virtual {printf(" CDerive::B() ");} void C(float ival) //隐藏父类的C:函数名相同、与数不同,与virtual无关 {printf(" CDerive::C() ");} };int main(){CDerive d;CBase* pB = &d;d.A(1); pB->A(1);printf("\n");//均调用子类的Ad.B(1); pB->B(1);printf("\n");//分别调用各自的Bd.C(1); pB->C(1);printf("\n");//分别调用各自的Creturn 0;}
输出结果:
- C#中“覆盖”和“隐藏”的区别
- C++中覆盖、隐藏的区别
- JAVA中隐藏和覆盖的区别
- C++中重载/覆盖/隐藏的区别
- C++中重载 覆盖 隐藏的区别
- C++_重载、重写(覆盖)和隐藏的区别:
- C++【重载,覆盖,隐藏三者的区别】
- java中属性的隐藏和方法的覆盖区别
- java中类的覆盖和隐藏的区别
- 重载、覆盖、隐藏的区别
- 重载,覆盖,隐藏的区别
- 重载、覆盖、隐藏的区别
- 重载、覆盖、隐藏的区别
- 重载、覆盖、隐藏的区别
- 重载 、覆盖、隐藏的区别
- 重载、覆盖、隐藏的区别
- 覆盖和隐藏的区别
- 重载,覆盖隐藏的区别
- 快速揭开Word制表位设置的神秘面纱【系统收藏】
- linux kernel.shmall shemax shemin解释
- 2013年6月26 日我打开支付宝页面,向余额宝转入了 20元。
- ubuntu-arm 程序脚本自启动
- python手记(6)
- C++中覆盖、隐藏的区别
- LINQ to List泛型的几种简单查询(转:http://www.189works.com/article-43804-1.html)
- 0625学习笔记
- TCPserver客户端
- 共享中断 IRQF_SHARED 使用方法
- 【用户指南:Win8预设9种背景颜色随心切换】
- 四大实习时发现美女主管天天偷看这些网站,明白之后我也陷进去了~
- Android - ListView
- Boost Build