#include <iostream>
#include <string>
using namespace std;
/*---------------------------------
16-06 7复杂的抽象结构
1)一个抽象基类仍然可以派生出抽象类,只要该类没有把纯虚函数全部覆盖掉,
其派生出的抽象类,即其子类也没有完全将它的纯虚函数全部覆盖掉,那么
该子类也是抽象类
2)假如确定某个基类的虚函数一定会被其所有的派生类覆盖掉,那么,不如将
其设置为纯虚函数。不要试图去创建一个抽象类的对象。
---------------------------------*/
class animal
{
public:
animal(int);
virtual ~animal(){cout<<"析构动物"<<endl;}
virtual int getage(){return itsage;}
virtual void sleep()=0;
virtual void propagate()=0;
virtual void move()=0;
virtual void body()=0;
virtual void eat()=0;
virtual void show()=0;
private:
int itsage;
};
animal::animal(int age):itsage(age)
{
cout<<"创建动物"<<endl;
}
class mammalian:public animal
{
public:
mammalian(int age):animal(age)
{cout<<"创建哺乳类"<<endl;}
virtual ~mammalian(){cout<<"析构哺乳类"<<endl;}
virtual void propagate()
{ cout<<"哺乳类是胎生动物"<<endl;}
};
class bird:public animal
{
public:
bird(int age):animal(age)
{ cout<<"创建鸟类"<<endl;}
virtual ~bird(){cout<<"析构鸟类"<<endl;}
virtual void propagate()
{ cout<<"鸟类是卵生动物"<<endl;}
virtual void sleep()
{ cout<<"鸟类站着睡觉"<<endl;}
virtual void eat()
{ cout<<"鸟类吃素"<<endl;}
virtual void move()
{ cout<<"鸟类可以飞"<<endl;}
virtual void body()
{ cout<<"鸟类身体有羽毛"<<endl;}
virtual void show()
{ cout<<"鸟类一般寿命为:"<<getage()<<"年"<<endl;}
};
class human:public mammalian
{
public:
human(int age):mammalian(age)
{ cout<<"创建人类"<<endl;}
virtual ~human(){cout<<"析构人类"<<endl;}
virtual void propagate()
{ cout<<"人类是胎生动物"<<endl;}
virtual void sleep()
{ cout<<"人类躺着睡觉"<<endl;}
virtual void eat()
{ cout<<"人类吃荤"<<endl;}
virtual void move()
{ cout<<"人类直立行走"<<endl;}
virtual void body()
{ cout<<"人类身体裸露,没有羽毛"<<endl;}
virtual void show()
{ cout<<"人类一般寿命为:"<<getage()<<"年"<<endl;}
};
class pig:public mammalian
{
public:
pig(int age):mammalian(age)
{ cout<<"创建猪类"<<endl;}
virtual ~pig(){cout<<"析构猪类"<<endl;}
virtual void propagate()
{ cout<<"猪类是胎生动物"<<endl;}
virtual void sleep()
{ cout<<"猪类躺着睡觉"<<endl;}
virtual void eat()
{ cout<<"猪类吃素"<<endl;}
virtual void move()
{ cout<<"猪类爬行"<<endl;}
virtual void body()
{ cout<<"猪类身体裸露"<<endl;}
virtual void show()
{ cout<<"猪类一般寿命为:"<<getage()<<"年"<<endl;}
};
int main()
{
animal *p;
int choice;
bool quit =false;
while(1)
{
cout<<"1)猪类 2)人类 3)鸟类 0)退出";
cin>>choice;
switch(choice)
{
case 0:
quit =true;
break;
case 1:
p =new pig(1);
break;
case 2:
p =new human(80);
break;
case 3:
p =new bird(50);
break;
default:
quit =true;
break;
}
if(quit)
break;
p->show();
p->body();
p->eat();
p->move();
p->propagate();
p->sleep();
if(!quit)
delete p;
cout<<endl;
}
return 0;
}
运行结果:
1)猪类 2)人类 3)鸟类 0)退出1
创建动物
创建哺乳类
创建猪类
猪类一般寿命为:1年
猪类身体裸露
猪类吃素
猪类爬行
猪类是胎生动物
猪类躺着睡觉
析构猪类
析构哺乳类
析构动物
1)猪类 2)人类 3)鸟类 0)退出2
创建动物
创建哺乳类
创建人类
人类一般寿命为:80年
人类身体裸露,没有羽毛
人类吃荤
人类直立行走
人类是胎生动物
人类躺着睡觉
析构人类
析构哺乳类
析构动物
1)猪类 2)人类 3)鸟类 0)退出3
创建动物
创建鸟类
鸟类一般寿命为:50年
鸟类身体有羽毛
鸟类吃素
鸟类可以飞
鸟类是卵生动物
鸟类站着睡觉
析构鸟类
析构动物
1)猪类 2)人类 3)鸟类 0)退出0
Press any key to continue
C++ 多态性 5-- 7复杂的抽象结构
最新推荐文章于 2022-10-31 16:10:21 发布