Overload(重載):在C++程序中,能夠將語義、功能類似的幾個函數用同一個名字表示,但參數或返回值不一樣(包括類型、順序不一樣),即函數重載。
(1)相同的範圍(在同一個類中);
(2)函數名字相同;
(3)參數不一樣;
(4)virtual 關鍵字無關緊要。ios
Override(覆蓋):是指派生類函數覆蓋基類函數,特徵是:
(1)不一樣的範圍(分別位於派生類與基類);
(2)函數名字相同;
(3)參數相同;
(4)基類函數必須有virtual 關鍵字。ide
Overwrite(重寫):是指派生類的函數屏蔽了與其同名的基類函數,規則以下:
(1)若是派生類的函數與基類的函數同名,可是參數不一樣。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
(2)若是派生類的函數與基類的函數同名,而且參數也相同,可是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)。函數
#include <stdio.h> #include <iostream> class Parent { public: void F() { printf("Parent.F()/n"); } virtual void G() { printf("Parent.G()/n"); } int Add(int x, int y) { return x + y; } //重載(overload)Add函數 float Add(float x, float y) { return x + y; } }; class ChildOne:Parent { //重寫(overwrite)父類函數 void F() { printf("ChildOne.F()/n"); } //覆寫(override)父類虛函數,主要實現多態 void G() { printf("ChildOne.G()/n"); } }; int main() { ChildOne childOne;// = new ChildOne(); Parent* p = (Parent*)&childOne; //調用Parent.F() p->F(); //實現多態 p->G(); Parent* p2 = new Parent(); //重載(overload) printf("%d/n",p2->Add(1, 2)); printf("%f/n",p2->Add(3.4f, 4.5f)); delete p2; system("PAUSE"); return 0; }
轉自:http://blog.csdn.net/penzo/article/details/6001193spa