C++中隐藏的概念
来源:互联网 发布:Java中怎样输出Path 编辑:程序博客网 时间:2024/05/29 16:12
隐藏是指在继承过程中子类和父类存在同名函数的一种情况,他和重写很相似,但是是完全不同的两个概念。下面先对两个概念进行说明:
重写:重写翻译自override,也翻译成覆盖,是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),此时基类中被重写的函数必须有virtual修饰。
隐藏:隐藏是指派生类的函数屏蔽了与其同名的基类函数。这里有两种情况
1>子类函数名,参数列表,返回值类型与基类的完全一样,此时基类中被隐藏的函数不能有virtual修饰(否则就是重写)
2>函数同名,但是参数列表不同,此时基类中被隐藏的函数有没有virtual修饰均可。
请看如下例子
结果输出如下:
重写:重写翻译自override,也翻译成覆盖,是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),此时基类中被重写的函数必须有virtual修饰。
隐藏:隐藏是指派生类的函数屏蔽了与其同名的基类函数。这里有两种情况
1>子类函数名,参数列表,返回值类型与基类的完全一样,此时基类中被隐藏的函数不能有virtual修饰(否则就是重写)
2>函数同名,但是参数列表不同,此时基类中被隐藏的函数有没有virtual修饰均可。
请看如下例子
类定义如下:
#include<iostream>#include<functional>#include<string>using namespace std;class Parent{public:Parent () {cout<<"Parent () "<<endl;}~ Parent () {cout<<"~Parent()"<<endl;}virtual void vDis(){cout<<"Parent::virtual void vDis()"<<endl;}void Dis(){cout<<"Parent::void Dis()"<<endl;}};class Child:public Parent{public:Child(){cout<<"Child"<<endl;}~Child(){cout<<"~Child"<<endl;}void vDis(){cout<<"Child::void vDis()"<<endl;}void vDis(string s){cout<<"Child::void vDis(string s)"<<s<<endl;}void Dis(){cout<<"Child::void Dis()"<<endl;}};考虑如下代码:
int main(){Child c;c.vDis();c.vDis("TEST");c.Dis();return 0;}
结果输出如下:
Parent ()
Child
Child::void vDis()
Child::void vDis(string s)TEST
Child::void Dis()
~Child
~Parent()
结果分析:
第一句函数调用是重写,这一句是如何调用的已经在我上一篇文章中进行了讲解,如果不清楚可以看一下(http://blog.csdn.net/u010857719/article/details/52215091)。
第二句是隐藏的第二种情况,此时基类中被重写的函数没有virtual修饰,第三句是隐藏的第一种情况,此时基类中被隐藏的函数不能有virtual修饰,并且子类函数名,参数列表,返回值类型与基类的完全一样。
以上是我关于隐藏与重写之间区别的一点理解,若有错误,请批评指正,谢谢。
0 0
- C++中隐藏的概念
- C++中覆盖、重载、隐藏的概念
- 在C#中重写、隐藏和重载的概念
- c++中重载、覆盖和隐藏概念的区别
- C++ 中 重载 覆盖 隐藏 概念的理解
- C中字符串隐藏的陷阱
- C语言中隐藏输入的代码
- 【C/C++】概念:重载(overload),覆盖(override),隐藏(hide)的区别
- C语言中对齐概念的理解
- 理解c中堆栈的概念
- 转载object-c中selector的概念
- Objective-C 中 selector的概念
- c语言中容易混淆的概念
- C中关于常量的概念
- c语言中整数溢出的概念
- c语言中变量的概念
- c+中字符串的相关概念
- c中概念
- CoreText笔记
- Ubuntu设置root密码
- 二叉树之层序遍历
- System.currentTimeMillis()与SystemClock.uptimeMillis()
- Xen超级调用详细实现
- C++中隐藏的概念
- osiii运行状态图
- HDU 1969 Pie
- windows 内核对象
- JDK环境变量设置
- NSThread
- HA HADOOP集群和HIVE部署
- LIS、LCS 的o(n^2) 和 o(nlogn)算法小结
- Android反射机制实现与原理