隱藏,覆蓋,過載的區別
阿新 • • 發佈:2019-02-09
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;
}