重載往毡、隱藏、重寫(xiě)(覆蓋)
1靶溜、重載
重載:是指同一可訪(fǎng)問(wèn)區(qū)內(nèi)被聲明的幾個(gè)具有不同參數(shù)列(參數(shù)的類(lèi)型开瞭,個(gè)數(shù),順序不同)的同名函數(shù)罩息,根據(jù)參數(shù)列表確定調(diào)用哪個(gè)函數(shù)嗤详,重載不關(guān)心函數(shù)返回類(lèi)型。
class A{
public:
void test(int i);
void test(double i);//overload
void test(int i, double j);//overload
void test(double i, int j);//overload
int test(int i); //錯(cuò)誤瓷炮,非重載葱色。注意重載不關(guān)心函數(shù)返回類(lèi)型。
};
2娘香、隱藏
隱藏:是指派生類(lèi)的函數(shù)屏蔽了與其同名的基類(lèi)函數(shù)苍狰,注意只要同名函數(shù),不管參數(shù)列表是否相同烘绽,基類(lèi)函數(shù)都會(huì)被隱藏淋昭。
#include "stdafx.h"
#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”: 函數(shù)不接受 2 個(gè)參數(shù)
Base *fd = &pd;
fd->fun(1.0,1);//Base::fun(double ,int);
fd->fun(1);//error
system("pause");
return 0;
}
3、重寫(xiě)(覆蓋)
重寫(xiě)(覆蓋):是指派生類(lèi)中存在重新定義的函數(shù)安接。其函數(shù)名翔忽,參數(shù)列表,返回值類(lèi)型赫段,所有都必須同基類(lèi)中被重寫(xiě)的函數(shù)一致呀打。只有函數(shù)體不同(花括號(hào)內(nèi))矢赁,派生類(lèi)調(diào)用時(shí)會(huì)調(diào)用派生類(lèi)的重寫(xiě)函數(shù)糯笙,不會(huì)調(diào)用被重寫(xiě)函數(shù)。重寫(xiě)的基類(lèi)中被重寫(xiě)的函數(shù)必須有virtual修飾撩银。
#include<iostream>
using namespace std;
class Base
{
public:
virtual void fun(int i){ cout << "Base::fun(int) : " << i << endl;}
};
class Derived : public Base
{
public:
virtual void fun(int i){ cout << "Derived::fun(int) : " << i << endl;}
};
int main()
{
Base b;
Base * pb = new Derived();
pb->fun(3);//Derived::fun(int)
system("pause");
return 0;
}
4给涕、三者比較
重載和重寫(xiě)的區(qū)別:
(1)范圍區(qū)別:重寫(xiě)和被重寫(xiě)的函數(shù)在不同的類(lèi)中,重載和被重載的函數(shù)在同一類(lèi)中额获。
(2)參數(shù)區(qū)別:重寫(xiě)與被重寫(xiě)的函數(shù)參數(shù)列表一定相同够庙,重載和被重載的函數(shù)參數(shù)列表一定不同。
(3)virtual的區(qū)別:重寫(xiě)的基類(lèi)必須要有virtual修飾抄邀,重載函數(shù)和被重載函數(shù)可以被virtual修飾耘眨,也可以沒(méi)有。
隱藏和重寫(xiě)境肾,重載的區(qū)別:
(1)與重載范圍不同:隱藏函數(shù)和被隱藏函數(shù)在不同類(lèi)中剔难。
(2)參數(shù)的區(qū)別:隱藏函數(shù)和被隱藏函數(shù)參數(shù)列表可以相同胆屿,也可以不同,但函數(shù)名一定同偶宫;當(dāng)參數(shù)不同時(shí)非迹,無(wú)論基類(lèi)中的函數(shù)是否被virtual修飾,基類(lèi)函數(shù)都是被隱藏纯趋,而不是被重寫(xiě)憎兽。