C++里的宠物栏

这篇博客展示了面向对象编程的概念,通过创建Animal、Cat和Dog类来实现不同类型的动物,并定义了Kennel类来管理这些动物。Kennel类包含了接受动物、释放动物和列出动物的功能。示例中创建了Dog和Cat实例并存入Kennel进行管理。
摘要由CSDN通过智能技术生成
#include <iostream>
#include<cstring>
#include<stdlib.h>
#include<stdio.h> 
using namespace std;
class Animal{
	public:
		Animal(){
			name=NULL;
		} 
		Animal(char *n){
			name=strdup(n);
		}
		~Animal(){
			delete name;
		}
		virtual void WhoAmI(){
			cout<<"generic animal.\n";
		}
	protected:
		char *name;
};
class Cat:public Animal{
	public:
		Cat():Animal(){
		}
		Cat(char *n):Animal(n){
		}
		void WhoAmI(){
			cout<<"Cat: "<<name<<endl;
		}
};
class Dog:public Animal{
	public:
		Dog():Animal(){
		}
		Dog(char *n):Animal(n){
		}
		void WhoAmI(){
			cout<<"Dog: "<<name<<endl;
		}
};
class Kennel{
	public:
		Kennel(unsigned max);
		~Kennel(){
			delete Residents;
		}
		unsigned Accept(Animal *d);
		Animal * Release(unsigned pen);
		void ListAnimals();
	private:
		unsigned MaxAnimals,NumAnimals;
		Animal * * Residents;
};
Kennel::Kennel(unsigned max){
	MaxAnimals=max;
	NumAnimals=0;
	Residents=new Animal *[MaxAnimals];
	for(int i=0;i<MaxAnimals;i++){
		Residents[i]=NULL;
	}
}
unsigned Kennel::Accept(Animal *d){
	if(NumAnimals==MaxAnimals) return 0;
	++NumAnimals;
	int i=0;
	while(Residents[i]!=NULL) ++i;
	Residents[i]=d;
	return i+1; 
}
Animal * Kennel::Release(unsigned 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 Kennel::ListAnimals(){
	if(NumAnimals>0){
		for(int i=0;i<MaxAnimals;i++){
			if(Residents[i]!=NULL){
				cout<<"The Animal in pen "<<i+1<<"is :"<<endl;
				Residents[i]->WhoAmI();
			}
		}
	}
}
Dog d1("Dad");
Dog d2("Fsdfsf");
Cat c1("bdngncb"); 
Cat c2("Fsd");
int main(){
	Kennel K(20);
	K.Accept(&d1);
	K.ListAnimals();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值