重載 重寫(覆蓋) 隱藏

基本概念:

重載

在一個類中被聲明的幾個具有不同參數列(參數的類型,個數,順序不同)的同名函數,根據參數列表確   定調用哪個函數,重載不關心函數返回類型。

重寫(覆蓋):

其函數名,參數列表,返回值類型,所有都必須同基類中被重寫的函數一致。只有函數體不同(返回值不同的協變返回類型也可以構成重載)。
兩個方法分別位於派生類與基類
基類函數必須有 virtual 關鍵字,不能有 static ;子類方法有無virtual方法沒影響。

隱藏

兩個方法分別位於派生類與基類
函數名字相同,返回值可以不相同
參數不同,基類的函數不論有沒 virtual 關鍵字都將被隱藏(注意只要同名函數,不管參數列表是否相同,基類函數都會被隱藏)
參數相同,但是基類函數沒有 virtual關鍵字,那麼基類的方法將被隱藏(注意和重寫的區別)
#include <iostream>
using namespace std;

class Base
{
public:
    void fun(double ,int ){ cout << "Base::fun(double ,int )" << endl; }
};

class Derive : public Base
{
public:
    void fun(int ){ cout << "Derive::fun(int )" << endl; }
};

int main()
{
    Derive pd;
    pd.fun(1);//Derive::fun(int )
    pb.fun(0.01, 1);//error C2660: “Derive::fun”: 函數不接受 2 個參數

    system("pause");
    return 0;
}

函數重寫(override)與協變返回類型(covariant return type)

const重載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章