我有一个代表支票帐户的类,在支票帐户中有一个代表帐号的类成员。此帐号在构造函数中初始化(显然是随机数),用于几个不同的对象。我很难为每个对象获取不同的数字。主要是因为我刚刚开始使用C ++,我通过SO在这里看到的几个帖子实现了这个RNG的想法。
这是我的构造函数:
CheckingAccount::CheckingAccount(const Customer& owner): Account(owner){
srand ( time(NULL) );
int acctStartNum = 9;
int firstDigit = rand() % 10;
int secondDigit = rand() % 10;
int thirdDigit = rand() % 10;
int fourthDigit = rand() % 10;
ostringstream oss;
oss << acctStartNum << firstDigit << secondDigit << thirdDigit << fourthDigit;
accountNumber = stoi(oss.str());
}
我理解srand()
种子随机数,每次都能提供很好的价值分布。但是当我从代码中排除它时,每个对象都有不同的accountNumber
。但问题是,每次运行我的程序时,值都不会改变(即它只为每个对象生成一次随机值,然后保留这些值),这就是我实现srand()
的原因,但现在所有对象都有完全相同的accountNumber
,每次运行程序时都会更改它们。这是什么交易?在我实现srand()
并且从不改变之前,为什么它们都是不同的,但现在它们会改变但适用于所有对象?另外,作为旁注,我知道这可能看起来很草率,但是这是指导我在构造函数中执行此操作的赋值,否则我会创建一个函数。
答案 0 :(得分:0)
srand只应在生成任何随机数之前调用一次。它不应再被调用。否则,您的号码将不会像您希望的那样随机。