隐藏,覆盖,重载的区别

来源:互联网 发布:淘宝客pid 编辑:程序博客网 时间:2024/04/30 09:36

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