c++中多態的作用是什麼呢?其中封裝可以使得代碼模塊化,繼承可以擴展已存在的代碼,他們的目的都是爲了代碼重用。而多態的目的則是爲了接口重用。也就是說,不論傳遞過來的是哪個類的對象,函數都能夠通過同一個接口調用到這個類的對象的方法。簡單地概括爲“一個接口,多種方法”。
編譯時多態性:通過重載函數實現
運行時多態性:通過虛函數實現。
覆蓋:要有虛函數virtual,函數要一模一樣,什麼叫一模一樣,函數名,參數,返回類型三個條件。
重載:必須在一個域中,函數名稱相同但是函數參數不同
覆蓋:如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏
如果派生類的函數與基類的函數同名,並且參數也相同,但是基類函數沒有virtual關鍵字。此時,基類的函數被隱藏
#include<iostream>
using namespace std;
class Base
{
public:
virtual void f(float x)
{
cout<<"Base::f(float)"<< x <<endl;
}
void g(float x)
{
cout<<"Base::g(float)"<< x <<endl;
}
void h(float x)
{
cout<<"Base::h(float)"<< x <<endl;
}
};
class Derived : public Base
{
public:
virtual void f(float x)
{
cout<<"Derived::f(float)"<< x <<endl; //多態、覆蓋
}
void g(int x)
{
cout<<"Derived::g(int)"<< x <<endl; //隱藏
}
void h(float x)
{
cout<<"Derived::h(float)"<< x <<endl; //隱藏
}
};
int main(void)
{
Derived d;
Base *pb = &d;
Derived *pd = &d;
// Good : behavior depends solely on type of the object
pb->f(3.14f); // Derived::f(float) 3.14
pd->f(3.14f); // Derived::f(float) 3.14
pb->g(3.14f); // Base::g(float) 3.14
pd->g(3.14f); // Derived::g(int) 3
pb->h(3.14f); // Base::h(float) 3.14
pd->h(3.14f); // Derived::h(float) 3.14
return 0;
}