C++多態
術語「多態」(Polymorphism
)是」poly
「 + 「morphs
「的組合,其意味着多種形式。 這是一個希臘詞。 在面向對象編程中,我們使用3
個主要概念:繼承,封裝和多態。
C++中有兩種類型的多態:
- 編譯時多態性:通過函數重載和操作符重載來實現,這也稱爲靜態綁定或早期綁定。
- 運行時多態性:它通過方法覆蓋來實現,也稱爲動態綁定或後期綁定。
C++運行時多態性示例
下面來看看一個簡單的C++運行時多態的例子。
#include <iostream>
using namespace std;
class Animal {
public:
void eat(){
cout<<"Eating...";
}
};
class Dog: public Animal
{
public:
void eat()
{
cout<<"Eating bread...";
}
};
int main(void) {
Dog d = Dog();
d.eat();
return 0;
}
運行上面代碼,得到以下結果 -
Eating bread...
C++運行時多態性示例:通過使用兩個派生類
下面來看看看C++中的運行時多態性的另一個例子,下面有兩個派生類。
#include <iostream>
using namespace std;
class Shape {
public:
virtual void draw(){
cout<<"drawing..."<<endl;
}
};
class Rectangle: public Shape
{
public:
void draw()
{
cout<<"drawing rectangle..."<<endl;
}
};
class Circle: public Shape
{
public:
void draw()
{
cout<<"drawing circle..."<<endl;
}
};
int main(void) {
Shape *s;
Shape sh;
Rectangle rec;
Circle cir;
s=&sh;
s->draw();
s=&rec;
s->draw();
s=○
s->draw();
}
運行上面代碼,得到以下結果 -
drawing...
drawing rectangle...
drawing circle...
運行時多態性與數據成員
運行時多態性可以通過C++中的數據成員來實現。 下面來看看一個例子,通過引用變量訪問字段,引用變量引用派生類的實例。
#include <iostream>
using namespace std;
class Animal {
public:
string color = "Black";
};
class Dog: public Animal
{
public:
string color = "Grey";
};
int main(void) {
Animal d= Dog();
cout<<d.color;
}
運行上面代碼,得到以下結果 -
Black