转载自http://www.cnblogs.com/tanky_woo/archive/2012/02/08/2343203.html
//Overload重载:
//功能相近的几个函数用相同的名字表示,但参数不同(包括类型、顺序不同),即函数重载。
//(1)相同范围(在同一个类中)
//(2)函数名字相同
//(3)参数不同
//(4)virtual关键字可有可无。
//注意重载解析不考虑返回类型
//功能相近的几个函数用相同的名字表示,但参数不同(包括类型、顺序不同),即函数重载。
//(1)相同范围(在同一个类中)
//(2)函数名字相同
//(3)参数不同
//(4)virtual关键字可有可无。
//注意重载解析不考虑返回类型
//------函数名相同,参数不同且在相同范围--重载
//Override覆盖--重写 :
//是指派生函数覆盖基类函数,是C++多态的表现。
//(1)不同的范围(分别位于派生类与基类)
//(2)函数的名字相同
//(3)参数相同
//(4)返回值相同
//(4)基类函数必须有virtual关键字
//----------派生类函数与基类函数完全相同且基类函数有virtual关键字,允许被派生类覆盖
//Overwite--重定义
//(1)位于不同的范围(分别位于派生类与基类)
//(2)函数名字相同
//(3)返回值可以不同
//(4)参数不同,不论有无virtual关键字,基类的函数被隐藏
//(5)参数相同,但是基函数没有virtual关键字,基类函数被隐藏
//当派生类对基类函数进行了override/overwite ,则派生类使用自己重新override/overwite的函数,否则它使用基类的函数
#include<iostream>
#include<complex>
using namespace std;
class Base{
public:
virtual void a(int x){ cout << "Base::a(int)" << endl; }
virtual void a(double x){ cout << "Base::a(double)" << endl; } //overload Base ::a(int x)
virtual void b(int x){ cout << "Base::b(int)" << endl; }
void c(int x){ cout << "Base::c(int)" << endl; }
void d(int x){ cout << "Base::d(int)" << endl; }
};
class Derived :public Base{
public:
void a(complex<double>x){ cout << "Derived::a(complex)" << endl; } //overwrite Base ::a()
void b(int x){ cout << "Derived::b(int)" << endl; } //override Base ::b(int)
void c(int x){ cout << "Derived::c(int)" << endl; }
};
int main(){
Base A;
Derived B;
A.a(1.0); //Base::a(double);
B.a(1.0); //Derived::a(complex)
A.b(10); //Base::b(int)
B.b(10); //Derived::b(int)
A.d(1); //Base::d(int)
B.d(1); //Base::d(int)
system("pause");
return 0;
}