1. 程式人生 > >隱藏,覆蓋,過載的區別

隱藏,覆蓋,過載的區別

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; }