C++中隐藏的概念

隐藏是指在继承过程中子类和父类存在同名函数的一种情况,他和重写很相似,但是是完全不同的两个概念。下面先对两个概念进行说明:
重写:重写翻译自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修饰,并且子类函数名,参数列表,返回值类型与基类的完全一样。

以上是我关于隐藏与重写之间区别的一点理解,若有错误,请批评指正,谢谢。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值