C++ 我如何将一个类合并到这个随机生成器中?

C++ 我如何将一个类合并到这个随机生成器中?,c++,class,oop,C++,Class,Oop,我想添加一个选项,将Integer和Double类包含到我的项目中,并希望得到一些帮助,因为我被卡住了 标题: #ifndef RANDOM #define RANDOM #include <iostream> #include <vector> #include <ctime> #include <cstdlib> #include <algorithm> #include "Double.h" const int Int_b =

我想添加一个选项,将Integer和Double类包含到我的项目中,并希望得到一些帮助,因为我被卡住了

标题:

#ifndef RANDOM
#define RANDOM

#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#include "Double.h"

const int Int_b = 250;//these are for main
const int Int_s = 225;

class Random
{
private:
    std::vector<double> vectx;
    double _min, _max;
    int currIndex;
    void fillVect(double min, double max);
    //void fillVect(Double min, Double max);
    void shuffle();

public:
    Random();
    Random(double min, double max);
    //Random(Double min, Double max);
    Random(int seed);
    int nextInt();
    //Integer nextInteger();
    double nextDbl();
    //Double nextDouble();
    //void setRange(Double min, Double max);
    void setRange(double min, double max);
};
#endif

当一个简单的演员可以完成任务时,为什么还要重复你自己呢? 例如,你可以说:

fillVect( min.toDouble(), max.toDouble() )
最小值和最大值为双重类型。

In

Random::Random(Double min, Double max)
你所能做的就是

Random::Random(Double min, Double max)
{
    fillVect(min.toDouble(), max.toDouble());
}
并放弃void Random::fillVectDouble min的概念,将Double max作为冗余。但如果你必须实施它,那么

Random::Random(Double min, Double max)
{
    fillVect(min, max);
}

void Random::fillVect(Double min, Double max) {
    vectx.clear();
    currIndex = 0;
    for (unsigned i = 0; i < Int_b; ++i)
    {
        double r = (((double)rand() / (double)RAND_MAX * (max.toDouble() - min)) + min.toDouble());
        vectx.push_back(r);
    }
    shuffle();
}
但请注意,这是愚蠢的。对fillVect算法所做的任何更改都必须在两个地方进行,这将打开一系列可能的bug。说你换了一个,却忘了换另一个。或者你发现了一个bug,并且只在一次中修复它。或者因为打字错误,你只有一个错误。重复的代码浪费了编写、调试和维护的时间。为什么呢?因此,您在不同的位置调用toDouble,并且可能会多次调用,因为现在它处于for循环中。阅读有关环吊的内容,以解决该问题


双倍下一倍;利用Double::Doubledouble d.

这些类已经生成了,我只是想把它们插入。srandunsignedtime0;在构造函数中是个坏主意。每次创建该类的新实例时,您都将使用rand为该类的所有实例和程序中的任何其他人重新设置RNG。可能会导致有趣的bug。srand应该只调用一次,可能在main的早期。需要查看Double类才能提出任何有意义的建议。您遇到了什么问题?你看到错误了吗?还是你对结果不满意?哪一个?如何?我没有遇到问题,因为我甚至不知道从哪里开始。我是否只是在没有类的情况下复制函数,然后用类替换它们?我怀疑Double是否能很好地转换为Double。几乎可以肯定的是,它们有非常不同的内存布局。在OP定义缺少的数据类型之前,最好不要回答这样的问题。
Random::Random(Double min, Double max)
{
    fillVect(min.toDouble(), max.toDouble());
}
Random::Random(Double min, Double max)
{
    fillVect(min, max);
}

void Random::fillVect(Double min, Double max) {
    vectx.clear();
    currIndex = 0;
    for (unsigned i = 0; i < Int_b; ++i)
    {
        double r = (((double)rand() / (double)RAND_MAX * (max.toDouble() - min)) + min.toDouble());
        vectx.push_back(r);
    }
    shuffle();
}