如何用随机名创建基类数组?

时间:2015-05-09 16:03:15

标签: c++

基础班:员工
派生类1:admin
派生类2:学术

我的问题是如何创建一个包含随机名称的50个员工对象的列表,并且对于每个员工,它应该是随机管理员工或学术人员。

class staff{
private: int name, int ID;
public: 
    staff(int name, int ID){
         this->name = name;
         this->ID = ID; 
    }
};

class academic:public staff{
public:
    academic(int name, int ID):staff(name,ID){}
};

class admin:public staff{
public:
    admin(int name, int ID):staff(name,ID){}
};

如果我想制作staff *[10]; 它应该包含学术和管理员随机选择的工作人员和随机名称。

谢谢

1 个答案:

答案 0 :(得分:2)

您的代码中还有许多其他问题需要解决才能使其正确(目前甚至无法编译)。但是,您可以执行以下操作。

std::random_device random_device;
std::mt19937 engine{random_device()};
std::uniform_int_distribution<int> die_distribution;

std::vector<std::unique_ptr<staff>> people;
for (int i = 0; i < 50; ++i)
{
    if (die_distribution (engine) % 2)
    {
        people.emplace_back (new admin{die_distribution(engine), die_distribution(engine)});
    }
    else
    {
        people.emplace_back (new academic{die_distribution(engine), die_distribution(engine)});
    }
}

您需要添加vectormemoryrandom标题才能使其发挥作用。

如果由于某种原因您无法使用random标题,则可以使用较旧的“随机”号码设施。包括cstdlibctime

std::srand (std::time(0));
std::vector<std::unique_ptr<staff>> people;
for (int i = 0; i < 50; ++i)
{
    if (std::rand() % 2)
    {
        people.emplace_back (new admin{ std::rand(), std::rand() });
    }
    else
    {
        people.emplace_back (new academic{ std::rand(), std::rand() });
    }
}