基本概念:
重載
在一個類中被聲明的幾個具有不同參數列(參數的類型,個數,順序不同)的同名函數,根據參數列表確 定調用哪個函數,重載不關心函數返回類型。
重寫(覆蓋):
其函數名,參數列表,返回值類型,所有都必須同基類中被重寫的函數一致。只有函數體不同(返回值不同的協變返回類型也可以構成重載)。
兩個方法分別位於派生類與基類
基類函數必須有 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);
pb.fun(0.01, 1);
system("pause");
return 0;
}
函數重寫(override)與協變返回類型(covariant return type)
const重載