Overload、Override和隐藏的区别

来源:互联网 发布:unity3d室内漫游教程 编辑:程序博客网 时间:2024/05/08 15:25

Overload:顾名思义,就是Over(重新)——load(加载),所以中文名称是重载。它可以表现类的多态性,可以是函数里面可以有相同的函数名但是参数名、返回值、类型不能相同;或者说可以改变参数、类型、返回值但是函数名字依然不变

Override:就是ride(重写)的意思,在子类继承父类的时候子类中可以定义某方法与其父类有相同的名称和参数,当子类在调用这一函数时自动调用子类的方法,而父类相当于被覆盖(重写)了。

方法的重写Overriding和重载Overloading是多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

     1. overload:

[cpp] view plain copy
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. void print(int x)  
  5. {  
  6.     cout << "int C++" << endl;  
  7. }  
  8.   
  9. void print(char c)  
  10. {  
  11.     cout << "char C++" << endl;  
  12. }  
  13.   
  14. int main()  
  15. {  
  16.     int n = 1;  
  17.     char ch = 'a';  
  18.     print(n);  
  19.     print(ch);  
  20.   
  21.     return 0;  
  22. }  
      结果为:

int C++
char C++

      2. 隐藏:

[cpp] view plain copy
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. class A  
  5. {  
  6. public:  
  7.     void print(int x)  
  8.     {  
  9.         cout << "int C++" << endl;  
  10.     }  
  11. };  
  12.   
  13. class B : public A  
  14. {  
  15. public:  
  16.     void print(int x)  
  17.     {  
  18.         cout << "char C++" << endl;  
  19.     }  
  20. };  
  21.   
  22. int main()  
  23. {  
  24.     int n = 1;  
  25.     char ch = 'A';  
  26.   
  27.     A a;  
  28.     a.print(n);  
  29.   
  30.     B b;  
  31.     b.print(ch);  
  32.   
  33.     return 0;  
  34. }  

     结果为:

int C++
char C++
      下面再看一个隐藏的例子(千万要注意,下面这个程序并不是override):

[cpp] view plain copy
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. class A  
  5. {  
  6. public:  
  7.     virtual void print(int x)  
  8.     {  
  9.         cout << "int C++" << endl;  
  10.     }  
  11. };  
  12.   
  13. class B : public A  
  14. {  
  15. public:  
  16.     virtual void print(char x)  
  17.     {  
  18.         cout << "char C++" << endl;  
  19.     }  
  20. };  
  21.   
  22. int main()  
  23. {  
  24.     int n = 1;  
  25.     char ch = 'A';  
  26.   
  27.     A a, *p;  
  28.     p = &a;  
  29.     p->print(n);  
  30.   
  31.     B b;  
  32.     p = &b;  
  33.     p->print(ch);
  34.     b.print(n);
        b.print(ch);  
  35.   
  36.     return 0;  
  37. }  
      结果为:

int C++
int C++

char C++

char C++


      3. override

[cpp] view plain copy
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. class A  
  5. {  
  6. public:  
  7.     virtual void print(int x)  
  8.     {  
  9.         cout << "int C++" << endl;  
  10.     }  
  11. };  
  12.   
  13. class B : public A  
  14. {  
  15. public:  
  16.     virtual void print(int x)  
  17.     {  
  18.         cout << "char C++" << endl;  
  19.     }  
  20. };  
  21.   
  22. int main()  
  23. {  
  24.     int n = 1;  
  25.     char ch = 'A';  
  26.   
  27.     A a, *p;  
  28.     p = &a;  
  29.     p->print(n);  
  30.   
  31.     B b;  
  32.     p = &b;  
  33.     p->print(ch);  
  34.   
  35.     return 0;  
  36. }  
      结果为:

int C++
char C++


0 0