1.思维导图
2.编程题:
以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:
比喻:动物园的讲解员和动物表演
想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员,他会为每种动物表演做简单的介绍。
在这个场景中,我们可以将动物比作是不同的类,而每种动物表演则是类中的函数。而讲解员则是一个基类,他可以根据每种动物的特点和表演,进行相应的介绍。
具体过程如下:
定义一个基类 Animal,其中有一个虛函数perform(),用于在子类中实现不同的表演行为。
解:
程序代码:
#include <iostream>
using namespace std;
class Animal//创建一个抽象类Animal,包含动物名字、种类、行为和年龄四个属性
{
protected:
string name;//姓名
string kind;//种类
string act;//表演行为
int age;//年龄
public:
Animal(){}
Animal(string name,string kind,string act,int age):name(name),kind(kind),act(act),age(age)
{}
virtual void perform()=0;//使用纯虚函数
};
class Lion:public Animal//创建派生类Lion,继承Animal类,增加性别属性
{
private:
string sex;
public:
Lion(){}
Lion(string name,string kind,string act,int age,string sex):Animal(name,kind,act,age),sex(sex)
{}
void perform()// 对父类的成员函数重写
{
cout << "这是一只" << sex <<kind << "它的名字叫" << name << "它今年" <<age << "岁了" << "它正在表演" << act << endl;
}
};
class Elephant:public Animal//创建派生类Elephant,继承Animal类,增加体重属性
{
private:
int weight;
public:
Elephant(){}
Elephant(string name,string kind,string act,int age,int weight):Animal(name,kind,act,age),weight(weight)
{}
void perform()
{
cout << "这是一只" << kind << "它的名字叫" << name << "它今年" <<age << "岁了"<< "它重达"<< weight << "斤"<< "它正在表演" << act << endl;;
}
};
class Monkey:public Animal//创建派生类Monkey,继承Animal类,增加外号属性
{
private:
string nickname;
public:
Monkey(){}
Monkey(string name,string kind,string act,int age,string nickname):Animal(name,kind,act,age),nickname(nickname)
{}
void perform()
{
cout << "这是一只" << kind << "它的名字叫" << name << "它有一个外号叫"<<nickname<< "它今年" <<age << "多岁了"<< "它正在表演" << act << endl;
}
};
class Chicken:public Animal//创建派生类Chicken,继承Animal类,增加练习时长属性
{
private:
string year;
public:
Chicken(){}
Chicken(string name,string kind,string act,int age,string year):Animal(name,kind,act,age),year(year)
{}
void perform()
{
cout << "这是一只" << "练习时长"<< year << "的" << kind << "它的名字叫" << name << "它今年" <<age << "岁了"<< "它正在表演" << act <<endl;;
}
};
int main()
{
//创建不同种类的动物对象
Lion s1("辛巴","美洲狮","河东狮吼",3,"公");
Elephant s2("曼尼","猛犸象","泰山压顶",3,11000);
Monkey s3("孙悟空","猕猴","大闹天宫",2000,"齐天大圣");
Chicken s4("坤坤","坤哥","唱、跳、Rap、篮球",25,"两年半");
Animal *p= &s1;
p->perform();
p=&s2;
p->perform();
p=&s3;
p->perform();
p=&s4;
p->perform();
return 0;
}
代码截图:
运行结果: