动物园、教师工资C++(多态)

动物园:
某个动物园内,有老虎、狗、鸭子和猪等动物,动物园的管理员为每个动物都起了一个名字,并且每个动物都有年龄、体重等信息。每到喂食的时候,不同的动物都会叫唤(speak)。
每种动物的叫唤声均不同,老虎的叫唤声是“AOOO”,狗的叫唤声是“WangWang”,鸭子的叫唤声是“GAGA”,猪的叫唤声是“HENGHENG”。
定义一个Animal的基类,Animal类有函数Speak(),并派生老虎、狗、鸭子和猪类,其能发出不同的叫唤声(用文本信息输出叫声)。
编写程序,输入动物名称、名字、年龄,让动物园内的各种动物叫唤。
输入
测试案例的个数
第一种动物的名称 名字 年龄
第二种动物的名称 名字 年龄
输出
输出相应动物的信息
如果不存在该种动物,输出There is no 动物名称 in our Zoo.

#include<iostream>
using namespace std;
class Animal{
	protected:
		char *name;
		int age;
	public:
		Animal(char *n,int a);//构造函数
		virtual void Speak();//成员函数,声明Speak方法
		virtual ~Animal();//析构函数
};
Animal::Animal(char *n,int a){  //Animal构造函数定义初始值
		name=new char[strlen(n)+1];
		strcpy(name,n);
		age=a;	
}
void Animal::Speak(){}
Animal::~Animal(){//清除已有的name值
	if (name!=NULL)
		delete name;
}

class Tiger:public Animal{//老虎,公有继承Animal
	public:
		Tiger(char *n,int a);//老虎的构造函数
		virtual void Speak();//老虎叫这个行为
};
Tiger::Tiger(char *n,int a):Animal(n,a){}//构造函数传入Animal的值
void Tiger::Speak(){//老虎叫了
		cout<< "Hello,I am " <<name<< ",AOOO." <<endl;
}


class Dog:public Animal{
	public:
		Dog(char *n,int a);//狗的构造
		virtual void Speak();//狗叫行为
};
Dog::Dog(char *n,int a):Animal(n,a){}//一样继承Animal的值
void Dog::Speak(){//狗叫了
	cout<< "Hello,I am " <<name<< ",WangWang." <<endl;
}

class Duck:public Animal{
	public:
		Duck(char *n,int a);//鸭子的构造
		virtual void Speak();//鸭子叫行为
};
Duck::Duck(char *n,int a):Animal(n,a){}//一样继承Animal的值
void Duck::Speak(){//鸭子叫了
	cout<< "Hello,I am " <<name<< ",GAGA." <<endl;
}

class Pig:public Animal{
	public:
		Pig(char *n,int a);//猪的构造
		virtual void Speak();//猪叫行为
};
Pig::Pig(char *n,int a):Animal(n,a){}//一样继承Animal的值
void Pig::Speak(){//猪叫了
	cout<< "Hello,I am " <<name<< ",HENGHENG." <<endl;
}


int main(){
	char animal[20],name[20];
	int age,t,i;
	Animal *a1;
	cin>>t;
	while(t--){
		i=0;
		cin>>animal>>name>>age;
		if(!strcmp(animal,"Tiger")){
			i=1;
			Tiger t1(name,age);
			a1=&t1;
			a1->Speak();
		}
		if(!strcmp(animal,"Dog")){
			i=1;
			Dog d1(name,age);
			a1=&d1;
			a1->Speak();
		}
		if(!strcmp(animal,"Duck")){
			i=1;
			Duck d1(name,age);
			a1=&d1;
			a1->Speak();
		}
		if(!strcmp(animal,"Pig")){
			i=1;
			Pig p1(name,age);
			a1=&p1;
			a1->Speak();
		}
		if(i==0){
			cout<<"There is no "<<animal<<" in our Zoo."<<endl;
		}
	}
	return 0;
}

↑↑↑↑↑↑↑↑↑↑参考于:https://blog.csdn.net/hhhertzzz/article/details/106091853

教师工资:
输入1个数,判断教师职称,1代表教授,2代表副教授,3代表讲师;然后输入一组数据,分别是教师的姓名、性别、工号以及课时数,输出本月工资。其中工资计算方式如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元;副教授的固定工资为3000元,每个课时补贴30元;讲师的固定工资为2000元,每个课时补贴20元。输出教师的工资,若是不在这三个职称之内,输出Error.

#include<iostream>
using namespace std;
class Title{
	protected:
		string name;
		string gender;
		string jobid;
		double hours;
	public:
		Title(string _name,string _gender,string _jobid,double _hours):name(_name),gender(_gender),jobid(_jobid),hours(_hours){};
		virtual void printsalary(){}
};

class Professor:public Title{
	public:
		Professor(string a,string b,string c,double d):Title(a,b,c,d){};
		virtual void printsalary(){
			cout<<"姓名:"<<name<<endl;
			cout<<"性别:"<<gender<<endl;
			cout<<"工号:"<<jobid<<endl;
			cout<<"课时数:"<<hours<<endl;
			cout<<"本月工资:"<<5000+50*hours<<endl;
		}
};

class Ass_Professor:public Title{
	public:
		Ass_Professor(string a,string b,string c,double d):Title(a,b,c,d){};
		virtual void printsalary(){
			cout<<"姓名:"<<name<<endl;
			cout<<"性别:"<<gender<<endl;
			cout<<"工号:"<<jobid<<endl;
			cout<<"课时数:"<<hours<<endl;
			cout<<"本月工资:"<<3000+30*hours<<endl;
		}
};

class Lecturer:public Title{
	public:
		Lecturer(string a,string b,string c,double d):Title(a,b,c,d){};
		virtual void printsalary(){
			cout<<"姓名:"<<name<<endl;
			cout<<"性别:"<<gender<<endl;
			cout<<"工号:"<<jobid<<endl;
			cout<<"课时数:"<<hours<<endl;
			cout<<"本月工资:"<<2000+20*hours<<endl;
		}
};


int main(){
	int a;
	string b,c,d;
	double e;
	Title *p;
	cin>>a>>b>>c>>d>>e;
	if (a==1)
	{
		Professor pro(b,c,d,e);
		p=&pro;
		p->printsalary();
	}
	else if (a==2)
	{
		Ass_Professor ap(b,c,d,e);
		p=&ap;
		p->printsalary();
	}
	else if (a==3)
	{
		Lecturer le(b,c,d,e);
		p=&le;
		p->printsalary();
	}
	else
	{
		cout<<"Error.";
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值