2015-05-09 32 views
-2

基类:员工
衍生的Class1:管理员
派生类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]; 它应该包含学术和管理员随机选择的工作人员和随机名称。

谢谢

+3

您应该先给我们提供您已经尝试过的工作和有效的代码示例。 –

+0

我很困惑。我不能想办法做到这一点。我可以使用rand()给名单给员工名单,但是如何可以是随机的学术或管理人员? –

+0

你让基类员工变形(例如声明一个'virtual〜staff(){}'析构函数,并且有一个'std :: vector 根据你的rand()调用的结果,你可以选择'academic'或者'admin'实例。 –

回答

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)}); 
    } 
} 

你需要包括vectormemory,并且random头,使这项工作。


如果由于某种原因,你不能使用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() }); 
    } 
} 
+0

对不起micheal,有没有更好的解决方案,不用

+0

_ @ Michael Price_这个代码完全反映了我心中的想法,THX。 –

+1

@HasnainAli你也可以使用':: rand()'来得到类似的结果,只是随机分布结果的可靠性可能会更差。 –