📜  门| GATE CS 2021 |套装2 |问题12(1)

📅  最后修改于: 2023-12-03 14:58:21.408000             🧑  作者: Mango

题目说明

本题为门 | GATE CS 2021 |套装2 |问题12,考察了面向对象程序设计、C++语法及STL容器等知识。

题目描述

假设有一个Fruit类,其成员数据包括水果名称(name)和保质期(expiryDate)。现在需要实现一个类Basket,其中包含一个vector容器用于存储Fruit类的对象。请实现Basket类的以下功能:

  1. 添加水果:向vector容器中添加一种新的水果对象。
  2. 删除水果:从vector容器中删除一种指定名称的水果对象。
  3. 检查水果的保质期:返回vector容器中指定名称水果的保质期。若不存在该水果,则返回0。

要求:

  1. Fruit类已实现,不需要重复实现。
  2. Basket类需要实现默认构造函数和析构函数。
  3. Basket类需要实现以下成员函数:
    • void addFruit(Fruit f):将f添加到vector容器中;
    • void removeFruit(string name):从vector容器中删除指定名称的水果对象;
    • int checkExpiryDate(string name):返回vector容器中指定名称水果的保质期。

解题思路

本题主要考验了对于STL容器vector的使用。

Basket类中的vector容器用于存储Fruit对象,可以使用vector的push_back函数实现添加;使用erase函数实现删除;使用迭代器进行遍历查找指定名称的水果对象。

代码实现

#include <iostream>
#include <vector>
#include <string>

using namespace std;

class Fruit {
public:
    string name;
    int expiryDate;
    Fruit(string n, int e) : name(n), expiryDate(e) {}
};

class Basket {
public:
    vector<Fruit> fruits;

    Basket() {}
    ~Basket() {}

    void addFruit(Fruit f) { fruits.push_back(f); }

    void removeFruit(string name) {
        for (vector<Fruit>::iterator it = fruits.begin(); it != fruits.end(); it++) {
            if (it->name == name) {
                fruits.erase(it);
                break;
            }
        }
    }

    int checkExpiryDate(string name) {
        for (vector<Fruit>::iterator it = fruits.begin(); it != fruits.end(); it++) {
            if (it->name == name) {
                return it->expiryDate;
            }
        }
        return 0;
    }
};

int main() {
    Fruit apple("apple", 5);
    Fruit banana("banana", 7);
    Fruit lemon("lemon", 3);

    Basket basket;

    basket.addFruit(apple);
    basket.addFruit(banana);
    basket.addFruit(lemon);

    cout << "expired date of apple: " << basket.checkExpiryDate("apple") << endl;
    cout << "expired date of banana: " << basket.checkExpiryDate("banana") << endl;
    cout << "expired date of lemon: " << basket.checkExpiryDate("lemon") << endl;

    basket.removeFruit("apple");

    cout << "expired date of apple: " << basket.checkExpiryDate("apple") << endl;

    return 0;
}

以上代码实现了Fruit和Basket两个类,其中Basket类使用了vector容器进行管理。在main函数中对Basket类进行了测试,添加了三种水果对象,并对其中两种对象的保质期进行了输出;然后删除了一个水果对象,并对删除操作进行了测试。