轉載自http://www.cnblogs.com/tanky_woo/archive/2012/02/08/2343203.html
//功能相近的幾個函數用相同的名字表示,但參數不同(包括類型、順序不同),即函數重載。
//(1)相同範圍(在同一個類中)
//(2)函數名字相同
//(3)參數不同
//(4)virtual關鍵字可有可無。
//注意重載解析不考慮返回類型
//Override覆蓋--重寫 :
//是指派生函數覆蓋基類函數,是C++多態的表現。
//(1)不同的範圍(分別位於派生類與基類)
//(2)函數的名字相同
//(3)參數相同
//(4)返回值相同
//(4)基類函數必須有virtual關鍵字
//----------派生類函數與基類函數完全相同且基類函數有virtual關鍵字,允許被派生類覆蓋
//Overwite--重定義
//(1)位於不同的範圍(分別位於派生類與基類)
//(2)函數名字相同
//(3)返回值可以不同
//(4)參數不同,不論有無virtual關鍵字,基類的函數被隱藏
//(5)參數相同,但是基函數沒有virtual關鍵字,基類函數被隱藏
#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;
}