術(shù)語(yǔ)“多態(tài)”(Polymorphism
)是”poly
“ + “morphs
“的組合,其意味著多種形式。 這是一個(gè)希臘詞。 在面向?qū)ο缶幊讨?,我們使?code>3個(gè)主要概念:繼承,封裝和多態(tài)。
C++中有兩種類(lèi)型的多態(tài):
下面來(lái)看看一個(gè)簡(jiǎn)單的C++運(yùn)行時(shí)多態(tài)的例子。
#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;
}
運(yùn)行上面代碼,得到以下結(jié)果 -
Eating bread...
下面來(lái)看看看C++中的運(yùn)行時(shí)多態(tài)性的另一個(gè)例子,下面有兩個(gè)派生類(lèi)。
#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();
}
運(yùn)行上面代碼,得到以下結(jié)果 -
drawing...
drawing rectangle...
drawing circle...
運(yùn)行時(shí)多態(tài)性可以通過(guò)C++中的數(shù)據(jù)成員來(lái)實(shí)現(xiàn)。 下面來(lái)看看一個(gè)例子,通過(guò)引用變量訪問(wèn)字段,引用變量引用派生類(lèi)的實(shí)例。
#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;
}
運(yùn)行上面代碼,得到以下結(jié)果 -
Black