C++中重載和重寫的區別

重載

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

#include<bits/stdc++.h>

using namespace std;

class A
{
	void fun() {};
	void fun(int i) {};
	void fun(int i, int j) {};
};

重寫(覆寫)

是指派生類中存在重新定義的函數。其函數名,參數列表,返回值類型,所有都必須同基類中被重寫的函數一致。只有函數體不同(花括號內),派生類調用時會調用派生類的重寫函數,不會調用被重寫函數。重寫的基類中被重寫的函數必須有virtual修飾。

#include<bits/stdc++.h>

using namespace std;

class A
{
public:
	virtual	void fun()
	{
		cout << "A";
	}
};
class B :public A
{
public:
	virtual void fun()
	{
		cout << "B";
	}
};
int main(void)
{
	A* a = new B();
	a->fun();//輸出B
}

重載和重寫的區別

(1)範圍區別:重寫和被重寫的函數在不同的類中,重載和被重載的函數在同一類中。

(2)參數區別:重寫與被重寫的函數參數列表一定相同,重載和被重載的函數參數列表一定不同。

(3)virtual的區別:重寫的基類函數必須要有virtual修飾,重載函數和被重載函數可以被virtual修飾,也可以沒有。

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