2012年C++专家进阶之二
一、 类成员函数的重载、覆盖和隐藏的区别
相同点:都是函数名字相同
序号 | 区别项 | 重载 | 覆盖 | 隐藏 |
1 | 含义 | 无此一说 主要方便编写代码,函数可以重名 | 派生类函数覆盖基类函数 | 指派生类的函数屏蔽了与其同名的基类函数 |
2 | 范围 | 相同范围 | 不同的范围 | 不同的范围 |
3 | 类 | 都在同一个类中 | 分别位于派生类与基类 | 分别位于派生类与基类 |
4 | 参数 | 不同 | 相同 | 无所谓 |
5 | Virtual关键字 | 无所谓,也就是可有可无 | 必须有 并且是基类函数必须有virtual关键字 | 1.参数不相同,不论基类函数有无virtual关键,基类的函数将被隐藏 2.参数相同,但是基类函数没有virtual关键字,基类的函数被隐藏 |
6 | 作用 | 无 | 派生类函数覆盖基类函数 | 派生类函数隐藏基类函数 |
程序代码,清晰解读这3个极易混淆的概念:
if(函数名称相同)
{
if(同一个类中) //范围相同
{
if(参数不相同)//
{
printf(“这就是重载的概念”);//
}
}
else if(一个派生类 && 一个是基类) // 分属两个不同的类
{
if(参数相同)
{
if(基类函数有关键字virtual)
{
printf(“这就是覆盖的概念”);
}
else
{
printf(“这就叫隐藏”);
}
}
else
{
printf(“这就叫隐藏”);
}
}
}
总结
1.重载、覆盖、隐藏是3个概念;
2.满足哪些具体的条件,才能叫重载、覆盖或者隐藏呢;
3.覆盖与隐藏的本质,就是基类函数不工作,工作的是派生类函数;
4.重载是针对一个类而言的概念,参数必须不同;
5.覆盖是针对基类、派生类而言,也就是有继承关系的类而言,并且必须带virtual关键字,参数要相同;
6隐藏是针对基类、派生类而言,也就是有继承关系的类而言,只要不是覆盖,必然是隐藏;
如果您跟人家讲不清这3个概念,就写一段代码吧!代码就是我们的沟通交流的语言。他懂的!!!!!