C++作业2.0

目录

1.猫吃鱼

要求

思路

代码 

2.生小狗

要求

思路

代码


1.猫吃鱼

要求

写一个类Fish ,有品种和重量两个属性,属性的类型自己选择 ,要求属性封装。

写一个类CatCat中有一个公有的成员函数:

Fish& eat(Fish &f);

eat函数的功能要求判断Fish的品种:

  • 如果品种是“秋刀鱼”,则输出“无论多沉,我都爱吃。”。同时修改Fish &f的重量为0,并作为函数的返回值返回。
  • 如果品种不是“秋刀鱼”,则判断鱼的重量,若重量大于200,吃鱼输出信息并返回一个重量为0Fish;若重量小于200,输出信息,不要修改鱼的重量,直接返回鱼的对象。

其它知识点(构造函数、构造初始化列表等)可以自行选择是否采用。 

思路

一、整体功能概述

 

模拟了猫吃鱼的场景。用户输入鱼的品种和重量,然后创建鱼对象和猫对象,猫根据鱼的品种和重量决定是否吃鱼,并更新鱼的重量,最后输出鱼的剩余重量。

 

二、类的分析

 
  1. Fish类:

    • 成员变量
      • kind:表示鱼的品种,是一个string类型的变量。
      • weight:表示鱼的重量,是一个int类型的变量。
    • 构造函数
      • Fish(string k, int w):接受鱼的品种和重量作为参数,初始化kindweight成员变量。
    • 成员函数
      • get_kind():返回鱼的品种。
      • get_weight():返回鱼的重量。
      • set_weight(int w):设置鱼的重量。
  2. 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函数中,通过用户输入两只狗的信息,判断它们是否能生育出小狗,并输出小狗的属性(如果能生育)。

 

二、类的分析

 
  1. 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;
    }
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值