目录
1.猫吃鱼
要求
写一个类Fish ,有品种和重量两个属性,属性的类型自己选择 ,要求属性封装。写一个类Cat,Cat中有一个公有的成员函数:
Fish& eat(Fish &f);
eat函数的功能要求判断Fish的品种:
- 如果品种是“秋刀鱼”,则输出“无论多沉,我都爱吃。”。同时修改Fish &f的重量为0,并作为函数的返回值返回。
- 如果品种不是“秋刀鱼”,则判断鱼的重量,若重量大于200,吃鱼输出信息并返回一个重量为0的Fish;若重量小于200,输出信息,不要修改鱼的重量,直接返回鱼的对象。
其它知识点(构造函数、构造初始化列表等)可以自行选择是否采用。
思路
一、整体功能概述
模拟了猫吃鱼的场景。用户输入鱼的品种和重量,然后创建鱼对象和猫对象,猫根据鱼的品种和重量决定是否吃鱼,并更新鱼的重量,最后输出鱼的剩余重量。
二、类的分析
Fish
类:
- 成员变量:
kind
:表示鱼的品种,是一个string
类型的变量。weight
:表示鱼的重量,是一个int
类型的变量。- 构造函数:
Fish(string k, int w)
:接受鱼的品种和重量作为参数,初始化kind
和weight
成员变量。- 成员函数:
get_kind()
:返回鱼的品种。get_weight()
:返回鱼的重量。set_weight(int w)
:设置鱼的重量。
Cat
类:
- 成员函数:
eat(Fish &f)
:接受一个鱼对象的引用作为参数。根据鱼的品种和重量决定猫是否吃鱼,如果鱼是 “秋刀鱼”,无论重量如何猫都吃;如果鱼的重量大于 200,猫也吃;否则猫不吃,并输出鱼的品种。在猫吃鱼的情况下,将鱼的重量设置为 0。三、主函数分析
在
main
函数中,使用一个无限循环让用户不断输入鱼的品种和重量。
- 首先,提示用户输入鱼的品种和重量。
- 然后,根据用户输入创建一个
Fish
对象。- 接着,创建一个
Cat
对象。- 调用
Cat
对象的eat
函数,让猫吃鱼。- 最后,输出鱼的剩余重量。
代码
#include <iostream>
#include <time.h>
using namespace std;
class Fish
{
private:
string kind; //品种
int weight; //重量
public:
Fish(string k,int w):kind(k),weight(w){}
string get_kind()
{
return kind;
}
int get_weight()
{
return weight;
}
void set_weight(int w)
{
weight=w;
}
};
class Cat
{
public:
Fish& eat(Fish &f)
{
if(f.get_kind()=="秋刀鱼")
{
cout<<"无论多沉,我都爱吃"<<endl;
f.set_weight(0);
}
else if(f.get_weight()>200)
{
cout<<"鱼大,吃"<<endl;
f.set_weight(0);
}
else
{
cout<<"鱼小,不吃"<<endl;
cout<<"鱼的品种:"<<f.get_kind()<<endl;
}
}
};
int main()
{
string k;
int w;
while(true)
{
cout<<"请输入鱼的品种,重量:"<<endl;
cin>>k>>w;
Fish f(k,w);
Cat c;
c.eat(f);
cout<<"鱼的重量:"<<f.get_weight()<<endl;
}
}
2.生小狗
要求
写一个Dog类,要求有性别、年龄和品种三个属性,属性值封装,使用构造函数传参初始化。增加函数Dog* birth(const Dog& d),在函数体内部判断d与当前狗对象的属性值,当满足以下条件时,返回新创建的狗对象:
- 两条狗的年龄2-5
- 一公一母
新创建的狗对象的属性满足以下条件:
- 年龄:1岁
- 性别:随意
- 品种:
- 如果父母的品种一样,品种就是父母的品种
- 如果父母的品种不一样,品种是父母品种的拼合(自己制定拼合逻辑)
如果两条狗不能生育,返回NULL。
思路
一、整体功能概述
定义了一个
Dog
类,用于模拟狗的属性和生育行为。在main
函数中,通过用户输入两只狗的信息,判断它们是否能生育出小狗,并输出小狗的属性(如果能生育)。二、类的分析
Dog
类:
- 成员变量:
sex
:表示狗的性别,公为 0,母为 1。age
:表示狗的年龄。kind
:表示狗的品种。- 构造函数:
Dog(int s, int a, string k)
:接受狗的性别、年龄和品种作为参数,初始化成员变量。如果传入的性别参数为 2,则随机生成性别(通过time(NULL)%2
)。- 成员函数:
birth(const Dog& d)
:接受另一只狗作为参数,判断两只狗是否能生育出小狗。如果两只狗性别不同且年龄在 2 到 5 岁之间,则创建一只新的小狗并返回其指针,否则返回NULL
。get_sex()
、get_age()
、get_kind()
:分别用于获取狗的性别、年龄和品种。三、主函数分析
使用无限循环,让用户可以多次输入狗的信息进行生育判断。
- 首先,提示用户输入狗 A 的性别、年龄和品种,并创建狗 A 对象。
- 接着,提示用户输入狗 B 的性别、年龄和品种,并创建狗 B 对象。
- 调用狗 B 的
birth
函数,传入狗 A 作为参数,尝试让狗 B 生育小狗。- 如果返回的指针为
NULL
,表示两狗不能生育,输出相应信息并继续下一轮循环。- 如果返回的指针不为
NULL
,表示生育成功,输出小狗的性别、年龄和品种。
代码
#include <iostream>
#include <time.h>
using namespace std;
class Dog
{
private:
int sex; //性别 公0母1
int age; //年龄
string kind; //品种
public:
Dog(int s,int a,string k)
{
if(s==2)
sex=time(NULL)%2;
else
sex=s;
age=a;
kind=k;
}
Dog* birth(const Dog& d)
{
if(sex!=d.sex)
{
if(age<2||age>5||d.age<2||d.age>5)
return NULL;
else
{
Dog* NewDog=new Dog(3,1,d.kind);
return NewDog;
}
}
return NULL;
}
int get_sex()
{
return sex;
}
int get_age()
{
return age;
}
string get_kind()
{
return kind;
}
};
int main()
{
while(1)
{
int s;
int a;
string k;
cout<<"请输入狗A的性别(公0母1)、年龄、品种:"<<endl;
cin>>s>>a>>k;
Dog dogA(s,a,k);
cout<<"请输入狗B的性别(公0母1)、年龄、品种:"<<endl;
cin>>s>>a>>k;
Dog dogB(s,a,k);
Dog* NewDog=dogB.birth(dogA);
if(NewDog==NULL)
{
cout<<"两狗不能生育"<<endl;
continue;
}
else
{
cout<<"小狗的属性:"<<endl;
cout<<"性别:"<<NewDog->get_sex()<<endl;
cout<<"年龄:"<<NewDog->get_age()<<endl;
cout<<"品种:"<<NewDog->get_kind()<<endl;
}
}
}