思维导图
以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:
比喻:动物园的讲解员和动物表演
想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员,他会为每种动物表演做简单的介绍。
在这个场景中,我们可以将动物比作是不同的类,而每种动物表演则是类中的函数。而讲解员则是一个基类,他可以根据每种动物的特点和表演,进行相应的介绍。
具体过程如下:
定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为。
#include <iostream>
using namespace std;
class Animal
{
private:
string name;
string hometown;
public:
Animal(){};
Animal(string name,string hometown):name(name),hometown(hometown){};
virtual void perform()
{
cout<<"大家好,我是来自"<<hometown<<"的解说员"<<name<<",接下来我将为大家带来一些动物朋友的表演"<<endl<<endl<<endl;
}
};
class Crow:public Animal
{
private:
string creature;
string feature;
string performance;
public:
Crow(){};
Crow(string creature,string feature,string name,string hometown,string performance):Animal(name,hometown),creature(creature),feature(feature),performance(performance)
{
}
void perform()
{
cout<<"好的我们来到解说员视角"<<endl<<"我们的动物朋友"<<creature<<"拥有"<<feature<<"的特征"<<endl;
cout<<"它要带来的表演是 《《"<<performance<<" !!》》"<<endl<<endl<<endl;
}
};
class Tiger:public Animal
{
private:
string creature;
string feature;
string performance;
public:
Tiger(){};
Tiger(string creature,string feature,string name,string hometown,string performance):Animal(name,hometown),creature(creature),feature(feature),performance(performance)
{
}
void perform()
{
cout<<"好的我们来到解说员视角"<<endl<<"我们的动物朋友"<<creature<<"拥有"<<feature<<"的特征"<<endl;
cout<<"它要带来的表演是 《《"<<performance<<" !!》》"<<endl<<endl<<endl;
}
};
class Tornado:public Animal
{
private:
string creature;
string feature;
string performance;
public:
Tornado(){};
Tornado(string creature,string feature,string name,string hometown,string performance):Animal(name,hometown),creature(creature),feature(feature),performance(performance)
{
}
void perform()
{
cout<<"接下来要登场的是本场节目的究极神秘重磅嘉宾"<<endl<<"掌声有请"<<feature<<"的"<<creature<<"登场!!"<<endl;
cout<<"它要带来的表演是 《《"<<performance<<" !!》》"<<endl<<endl<<endl;
}
};
int main()
{
Animal a1("丁真","妈妈生");
Animal *p=&a1;
p->perform();
Crow c1("乌鸦","黑且喜欢吃腐肉","丁真","妈妈生","乌鸦坐飞机");
p=&c1;
p->perform();
Tiger t1("黑虎","喜欢自言自语","丁真","妈妈生","黑虎掏心");
p=&t1;
p->perform();
Tornado t2("龙卷风","性格暴躁,容易发怒","丁真","妈妈生","龙卷风摧毁停车场");
p=&t2;
p->perform();
return 0;
}