隐藏,覆盖,重载的区别

举报
IM_STONE 发表于 2020/12/28 23:45:49 2020/12/28
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。