📌  相关文章
📜  门| Sudo GATE 2020 Mock III(2019 年 1 月 24 日)|问题 4(1)

📅  最后修改于: 2023-12-03 15:28:46.773000             🧑  作者: Mango

门| Sudo GATE 2020 Mock III(2019 年 1 月 24 日)|问题 4

此题是关于抽象数据类型的实现和操作。需要实现门这个 ADT 的 C++ 类,该类具有以下特点:

  1. 门的状态只有开和关两种。
  2. 门有一个名称,只有唯一的名称可以标识一扇门。
  3. 门有一个开关门的开关,可以控制门的状态。
  4. 门有一把锁,可以对门进行上锁和解锁。如果门上锁,则无法对门进行开关操作,同时,无法对门进行锁的操作(上锁和解锁)。
  5. 需要记录门被开关的次数。

门类的定义需要包括以下成员函数:

  • 一个构造函数,用于创建一个门对象,需要传入门的名称,初始状态为“关”。
  • 一个函数,用于返回门的名称。
  • 一个函数,用于获取门的状态。
  • 一个函数,用于开门。
  • 一个函数,用于关门。
  • 一个函数,用于将门锁上。
  • 一个函数,用于将门解锁。
  • 一个函数,用于返回门被开关的次数。

代码实现如下:

#include <string>

class Door {
private:
    const std::string name;
    bool status;
    bool isLocked;
    int timesOpened;

public:
    Door(std::string dname) : name(dname), status(false), isLocked(false), timesOpened(0) { }

    std::string getName() {
        return name;
    }

    bool getStatus() {
        return status;
    }

    void openDoor() {
        if (isLocked) {
            return;
        }

        status = true;
        timesOpened++;
    }

    void closeDoor() {
        if (isLocked) {
            return;
        }

        status = false;
    }

    void lock() {
        if (status) {
            return;
        }

        isLocked = true;
    }

    void unlock() {
        isLocked = false;
    }

    int getTimesOpened() {
        return timesOpened;
    }
};

这里的 Door 类使用了 const 修饰的字符串类型变量来存储门的名称,同时使用 bool 类型的变量来存储门的状态和锁的状态,使用一个 int 类型的变量来记录门被开关的次数。

门的状态只有开和关两种,可以使用一个 bool 类型的变量来存储门的状态。开门操作只需要将门的状态设置为 true,并将被开关的次数加一。关门操作只需要将门的状态设置为 false。上锁操作和解锁操作只需要设置一个 bool 类型的变量即可。

需要注意的是,如果门被上锁后,无法对门进行开关操作和锁的操作。在 Door 的开门和关门函数内部,都需要进行一次判断,如果门被上锁,则立即退出函数。