重載重寫重定義

函數重載:

1 必須在同一個類中進行
2 子類無法重載父類的函數,父類同名函數將被名稱覆蓋
3 重載是在編譯期間根據參數類型和個數決定函數調用

函數重寫:

1 必須發生在子類與父類之間
2 並且父類與子類中的函數必須有完全相同的原型
3 使用virtual聲明之後能夠產生多態(如果不使用virtual,)

class Parent
{
public:
	virtual void func()
	{
		cout << "func() do... " << endl;
	}
	virtual void func(int i)
	{
		cout << "func(int i) do ..." << i << endl;
	}
	virtual void func(int i, int j)
	{
		cout << "func(int i, int j) do...." << i << ", " << j << endl;
	}

};

上面這個Parent類的三個func() 方法在Parent類中就是重載

class Child :public Parent
{
public:
	virtual void func(int i, int j)
	{
		cout << "func(int i, int j) do...." << i << ", " << j << endl;
	}
	virtual void func(int i, int j, int k)
	{
		cout << "func(int i, int j) do...." << i << ", " << j << ", " << k <<endl;
	}
};

上面的Child類中的兩個func() 方法在Child類中也是重載

並且子類Child跟父類Parnet中都有一個函數func(int i, int j) 函數參數是兩個,那麼這個函數就是子類重寫父類的函數,

int main()
{
	Child c1;
	// c++ 編譯器看到子類中已經存在了,就不會去父類中找,所以C++編譯器會報錯
	// c1.func();   // 這句代碼是有錯誤的

	// c1.abc(2);   // 不會報錯
	// c1.abc()  // 這個函數是會被覆蓋掉的
	// 如果需要調用父類的abc()  函數  那麼就需要顯示地調用父類的同名方法
	c1.Parent::abc();   // 加上域作用符號顯示調用


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