隐藏,覆盖,重载的区别
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;
}