我想创建一个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
};
}
答案 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
指定会议室类型和成员类型,但这不是一个好方法。
如果需要添加新的房间类型和/或成员类型,则必须修改类,这些类可能处于良好的工作状态。这违反了open-closed principle。
您将需要使用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
成员函数以为类提供行为。