C++ 多态性 5-- 7复杂的抽象结构

80 篇文章 0 订阅
#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值