⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 多态性猫狗.cpp

📁 经典 C++代码
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

class Animal
{
protected:
	char *name;

public:
	Animal()
	{name=NULL;}

	Animal(char *n)
	{
		name = new char[strlen(n)+1];
		strcpy(name, n);
	}

	~Animal()
	{delete name;}

	virtual void WhoAmI()
	{printf("generic animal ");}
};

class Cat:public Animal
{
public:
	Cat()
		:Animal()
	{}

	Cat(char *n)
		:Animal(n)
	{}

	virtual void WhoAmI()
	{
		printf("I am a cat name %s.\n",name);
	}
};

class Dog:public Animal
{
public:
	Dog()
		:Animal()
	{}

	Dog(char *n)
		:Animal(n)
	{}

	virtual void WhoAmI()
	{
		printf("I am a dog name %s.\n",name);
	}
};

class Zoo
{
private:
	unsigned int maxanimals;
	unsigned int numanimals;
	Animal **residents;

public:
	Zoo(unsigned int max)
	{
		maxanimals=max;
		numanimals=0;

		residents=new Animal *[maxanimals];

		for(int i=0;i<maxanimals;++i)
			residents[i]=NULL;
	}

	~Zoo()
	{delete residents;}

	unsigned int Accept(Animal *d);

	Animal *Release(unsigned int pen);

	void ListAnimals();
};

unsigned int Zoo::Accept(Animal *d)
{
	if(numanimals==maxanimals)
		return 0;
	++numanimals;

	int i=0;
	while(residents[i]!=NULL)
		++i;

	residents[i]=d;

	return i+1;

}

Animal *Zoo::Release(unsigned int pen)
{
	if(pen>maxanimals)
		return NULL;
	--pen;

	if(residents[pen]!=NULL)
	{
		Animal *temp=residents[pen];
		residents[pen]=NULL;
		--numanimals;
		return temp;
	}
	else
		return NULL;
}

void Zoo::ListAnimals()
{
	if(numanimals>0)
		for(int i=0;i<maxanimals;++i)
			if(residents[i]!=NULL)
			{
				printf("The dog is pen%d says: ",i+1);
				residents[i]->WhoAmI();
			}
}

Dog d1("Rover");
Dog d2("Spot");
Dog d3("Chip");
Dog d4("Buddy");
Dog d5("Butch");

Cat c1("Tinkerbell");
Cat c2("Inky");
Cat c3("Fluffy");
Cat c4("Princess");
Cat c5("Sylvester");

int main()
{
	Zoo z(20);

	z.Accept(&d1);

	unsigned int c2pen=z.Accept(&c2);

	z.Accept(&d3);
	z.Accept(&c1);

	unsigned int d4pen=z.Accept(&d4);

	z.Accept(&d5);
	z.Accept(&c5);
	z.Release(c2pen);

	z.Accept(&c4);
	z.Accept(&c3);
	z.Release(d4pen);

	z.Accept(&d2);

	z.ListAnimals();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -