隐藏,覆盖,重载的区别
【摘要】 1:先说重载,1首先两个函数的作用域必须相同,(这点很重要,基类和派生类不在一个作用域,所以基类和派生类的函数不可能重载),2函数名相同,3参数列表(参数类型,参数的个数,参数了顺序)不相同,4与返回值无关,叫重载;
2:隐藏:在基类和派生类之间发生的关系,函数名相同,派生类的函数把基类的函数给隐藏了,只关注函数数名,不管返回值和参数。 例:
#include&l...
1:先说重载,1首先两个函数的作用域必须相同,(这点很重要,基类和派生类不在一个作用域,所以基类和派生类的函数不可能重载),2函数名相同,3参数列表(参数类型,参数的个数,参数了顺序)不相同,4与返回值无关,叫重载;
2:隐藏:在基类和派生类之间发生的关系,函数名相同,派生类的函数把基类的函数给隐藏了,只关注函数数名,不管返回值和参数。
例:
#include<iostream>
using namespace std;
class A
{
private : int ma;
public: void show(){cout<<"ma="<<ma<<endl;}
};
class B: public A
{
private : int mb;
public: int show(){cout<<"mb="<<mb<<endl;return 0;}
};
int main()
{ A s1; B s2; s1.show(); s2.show(); return 0;
}
3:覆盖:覆盖是隐藏的一种特殊情况,派生类和基类的函数,
1 函数名相同;
2 返回值相同;
3 参数列表相同(不包括this指针在内);
4 基类函数为虚函数;
即为覆盖。
例:
#include<iostream>
using namespace std;
class A
{
private : int ma;
public: void virtual show(){cout<<"ma="<<ma<<endl;}
};
class B: public A
{
private : int mb;
public: void show(){cout<<"mb="<<mb<<endl;}
};
int main()
{ A s1; B s2; s1.show(); s2.show(); return 0;
}
文章来源: blog.csdn.net,作者:IM-STONE,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/doubleintfloat/article/details/52528637
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)