C ++类中的枚举

时间:2018-12-11 06:42:11

标签: c++ data-structures

我想创建一个C ++会议室预订系统,在该系统中,我想为成员{管理员,教职员工,学生}安排一堂课,针对教室类型的另一堂课{演讲厅,礼堂,实验室,...} 。问题是可以对指定其类型的两个类都使用枚举。然后在另一个类的main方法中会出现问题吗?

#include <iostream>
using namespace std;


class room {

    enum roomType {

        main,
        exam,
        lecture
    };
}

// another class for members

class member {

    enum memberType {

        admin,
        staff,
        student
    };
}

2 个答案:

答案 0 :(得分:1)

您的代码看起来不错(在课程结束后缺少;除外)。用法示例:

#include <iostream>

class room {
public:
    enum roomType { main, exam, lecture };

    room(roomType t) : type(t) {}
private:
    roomType type;
};

// another class for members

class member {
public:
    enum memberType { admin, staff, student };

    member(memberType t) : type(t) {}
private:
    memberType type;
};

int main() {
    room r(room::lecture);
    member m(member::staff);
}

答案 1 :(得分:0)

虽然您可以使用enum指定会议室类型和成员类型,但这不是一个好方法。

  1. 如果需要添加新的房间类型和/或成员类型,则必须修改类,这些类可能处于良好的工作状态。这违反了open-closed principle

  2. 您将需要使用if/else逻辑来处理不同的房间类型和成员类型。再一次,当您添加新的房间类型和/或成员类型时,您将不得不访问用于说明新添加的类型的上述if/else逻辑的所有位置。这是对open-closed principle的另一种违反。

    此外,if/else方法往往有问题。很容易错过一两个类型。

使用继承并创建不同类型的房间和成员会更好。

// room type and its sub-classes.

class room_t
{
}

class main_room_t : public room_t
{
};

class exam_room_t : public room_t
{
};

class lecture_room_t : public room_t
{
};

// member type and its sub-classes.

class member_t
{
};

class admin_t : public member_t 
{
};

class staff_t : public member_t 
{
};

class student_t : public member_t 
{
};

您需要添加必要的virtual成员函数以为类提供行为。