一、编程题:
以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:
比喻:动物园的讲解员和动物表演
想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员,他会为每种动物表演做简单的介绍。
在这个场景中,我们可以将动物比作是不同的类,而每种动物表演则是类中的函数。而讲解员则是一个基类,他可以根据每种动物的特点和表演,进行相应的介绍。
具体过程如下:
定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为
#include <iostream>
using namespace std;
class AnimalZoo
{
private:
string name;
public:
AnimalZoo()
{
cout << "Animal::无参构造函数 " << endl;
}
AnimalZoo(string name):name(name)
{
cout << "Animal::有参构造函数 " << endl;
}
virtual void perform() = 0;
};
class Speaker:public AnimalZoo
{
private:
string sex;
public:
Speaker()
{
cout << "Speaker::无参构造函数 " << endl;
}
Speaker(string name, string s):AnimalZoo(name),sex(s)
{
cout << "Speaker::有参构造函数 " << endl;
}
void perform()
{
cout << "这是: " << endl;
}
};
class Lion:public AnimalZoo
{
private:
string name;
public:
Lion()
{
cout << "Lion::无参构造函数 " << endl;
}
Lion(string name,string n):AnimalZoo(name),name(n)
{
cout << "Lion::有参构造函数 " << endl;
}
void perform()
{
cout << "这是我们动物园的狮子,他叫: " << name << " " << "它会跳舞" << endl;
}
};
class Elephant:public AnimalZoo
{
private:
string name;
public:
Elephant()
{
cout << "Elephant::无参构造函数 " << endl;
}
Elephant(string name, string n):AnimalZoo(name),name(n)
{
cout << "Elephant::有参构造函数 " << endl;
}
void perform()
{
cout << "这是我们动物园的大象,他叫: " << name << " " << "它会唱歌,表演炫饭" << endl;
}
};
class Monkey:public AnimalZoo
{
private:
string name;
public:
Monkey()
{
cout << "Monkey::无参构造函数 " << endl;
}
Monkey(string name, string n):AnimalZoo(name),name(n)
{
cout << "Monkey::有参构造函数 " << endl;
}
void perform()
{
cout << "这是我们动物园的猴子,他叫: " << name << " " << "它会拍手,还很喜欢和游客互动……" << endl;
}
};
int main()
{
Monkey m("欢乐动物园","大顺");
Elephant e("欢乐动物园","大力");
Lion l("欢乐动物园","大猫");
cout << "--------------------" << endl;
AnimalZoo *p;
p = &m;
p->perform();
cout << "--------------------" << endl;
p = &e;
p->perform();
cout << "--------------------" << endl;
p = &l;
p->perform();
return 0;
}
代码运行结果:
![](https://i-blog.csdnimg.cn/direct/c2e8887011e9455dae8cc4bf22389adc.png)
二、思维导图
![](https://i-blog.csdnimg.cn/direct/5abac522047a4d0d8313d68f785845af.png)