c++中重載、重寫、覆蓋的區別

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

相關文章
相關標籤/搜索