首页 > 解决方案 > 在继承类中使用 srand time null 获取相同的值

问题描述

我正在尝试修改我在课堂上学到的东西,并用“学生”类做一个简单的继承。每当我创建一个学生时,它都会创建 StudentStats,正如您在代码中看到的那样,它应该在构造函数中具有随机值。但我总是从构造函数中得到相同的值。我没有看到缺少什么,我在构造函数中包含了 time.h 和 srand(time(null)) 。

这可能是一个初学者的问题,但我真的不明白有什么问题:/

这是学生班:

#pragma once
#include <iostream>
#include <string>
#include "Personne.h"
#include "PTUT.h"
#include "Marks.h"
#include "StudentStats.h"
#include "StudentClass.h"

using namespace std;

class PTUT;
class StudentClass;
class Etudiant : public Personne, public Marks, public StudentStats

这是 StudentStats 构造函数:

#include "StudentStats.h"
#include <iomanip>
#include <time.h>

StudentStats::StudentStats()
{
    srand(time(NULL));
    Morale = (rand() % 81) + 20 ;
    MathLevel = (rand() % 81) + 20;
    ProgLevel = (rand() % 81) + 20;
    NetworkDBLevel = (rand() % 81) + 20;
    GeneralLevel = (rand() % 81) + 20;
}

我得到的结果(我在 main 中创建了 4 个学生,每个学生的统计数据用“--------”分隔):

结果

标签: c++randomrandom-seed

解决方案


Tx 到 Adrian Mole 的评论,我得到了答案。

我声明了一个名为“Seed”的静态布尔值,并且第一次调用构造函数,它将它从 false 更改为 True,所以下次我调用构造函数时,它不会尝试重新设置种子。

答:每次我调用构造函数时,我都会重新设置它(多次调用 srand time null),所以我声明了一个静态布尔值,用于调用 srand time null 一次。


推荐阅读