猫爱吃秋刀鱼
一、代码要求
写一个类Fish,有品种和重量两个属性,属性的类型自己选择,要求属性封装。
写一个类Cat,Cat中有一个公有的成员函数:
Fish& eat(Fish &f);
eat函数的功能要求判断Fish的品种:
● 如果品种是“秋刀鱼”,则输出“无论多沉,我都爱吃。”。同时修改Fish &f的重量为0,并作为函数的返回值返回。
● 如果品种不是“秋刀鱼”,则判断鱼的重量,若重量大于200,吃鱼输出信息并返回一个重量为0的Fish;若重量小于200,输出信息,不要修改鱼的重量,直接返回鱼的对象。
二、代码思路
主函数逻辑
- 在
main
函数中,创建了Fish
和Cat
的实例。 - 使用一个无限循环来持续接收用户输入:
- 提示用户输入鱼的种类和重量。
- 使用用户输入的信息设置鱼的属性。
- 调用
cat.eat(fish)
方法,让猫尝试吃掉鱼,并获取返回的鱼对象。 - 输出鱼的种类和剩余重量。
总体流程
- 用户输入鱼的种类和重量。
- 程序根据用户的输入设置鱼的属性。
- 猫尝试吃鱼,根据条件判断是否吃掉并输出结果。
- 循环进行,直到程序被手动停止。
三、代码及注释
#include <iostream>using namespace std;// 定义 Fish 类class Fish{private:string brand; // 鱼的品种float weight; // 鱼的重量public:// 设置鱼的品种void set_brand(string s){brand = s;}// 设置鱼的重量void set_weight(float w){weight = w;} // 获取鱼的品种string get_brand(){return brand;}// 获取鱼的重量float get_weight(){return weight;}};// 定义 Cat 类class Cat{public:// 猫吃鱼的函数,接受一个 Fish 引用作为参数Fish & eat(Fish &f){// 如果鱼的品种是秋刀鱼if(f.get_brand() == "秋刀鱼"){cout << "无论多沉,我都爱吃!!" << endl;f.set_weight(0); // 将鱼的重量设为0,表示被吃掉}else{// 如果鱼的重量大于200克if(f.get_weight() > 200){cout << "这鱼够大,我爱吃!" << endl;cout << "鱼的种类: " << f.get_brand() << " 鱼的重量: " << f.get_weight() << endl; // 输出鱼的种类和重量f.set_weight(0); // 将鱼的重量设为0}else{// 如果鱼的重量小于等于200克cout << "不是不吃只是太小了!!!" << endl;cout << "鱼的种类: " << f.get_brand() << " 鱼的重量: " << f.get_weight() << endl; // 输出鱼的种类和重量}}return f; // 返回鱼(可能是已经被吃掉的)}};int main(){Fish fish; // 创建一条鱼Cat cat; // 创建一只猫string s ; // 用于存储输入的鱼的种类float w; // 用于存储输入的鱼的重量while(1) // 无限循环,持续输入{cout << "请输入鱼的种类和重量:" << endl; // 提示用户输入cin >> s; // 输入鱼的种类cin >> w; // 输入鱼的重量fish.set_brand(s); // 设置鱼的品种fish.set_weight(w); // 设置鱼的重量Fish f = cat.eat(fish); // 猫吃鱼,返回的鱼// 输出鱼的种类和剩余重量cout << "鱼的种类: " << f.get_brand() << " " << "鱼的剩余重量: " << f.get_weight() << endl;}return 0;}