Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在无参数调用构造函数时生成随机数的问题_C++_Constructor - Fatal编程技术网

C++ 在无参数调用构造函数时生成随机数的问题

C++ 在无参数调用构造函数时生成随机数的问题,c++,constructor,C++,Constructor,我正在尝试创建一个Powerball模拟器,其中包含名为PowerballTicket和PowerballTicket的类。对于PowerballTicket,如果在没有参数的情况下调用构造函数,则需要生成6个随机数(如真实Powerball中的quickpick选项)。到目前为止,我得到的是 PowerballTicket::PowerballTicket(int x1, int x2, int x3, int x4, int x5, int x6) { RandomNumber ra

我正在尝试创建一个Powerball模拟器,其中包含名为
PowerballTicket
PowerballTicket
的类。对于
PowerballTicket
,如果在没有参数的情况下调用构造函数,则需要生成6个随机数(如真实Powerball中的quickpick选项)。到目前为止,我得到的是

PowerballTicket::PowerballTicket(int x1, int x2, int x3, int x4, int x5, int x6)
{
    RandomNumber randNum (1, 69);
    x1 = randNum.random();
    do {
        x2 = randNum.random();
    }while (x1 == x2);
    do {
        x3 = randNum.random();
    }while (x3 == x1 || x3 == x2);
    do {
        x4 = randNum.random();
    }while (x4 == x1 || x4 == x2 || x4 == x3);
    do {
        x5 = randNum.random();
    }while (x5 == x1 || x5 == x2 || x5 == x3 || x5 == x4);
    RandomNumber randNumPower (1, 23);
    mpowerball = randNumPower.random();
    mball1 = x1;
    mball2 = x2;
    mball3 = x3;
    mball4 = x4;
    mball5 = x5;
    mpowerball = x6;
}

int PowerballTicket::getball1()
{
    return mball1;
}

int PowerballTicket::getball2()
{
    return mball2;
}

int PowerballTicket::getball3()
{
    return mball3;
}

int PowerballTicket::getball4()
{
    return mball4;
}

int PowerballTicket::getball5()
{
    return mball5;
}

int PowerballTicket::getpowerball()
{
    return mpowerball;
}
我不确定这是否是一个包含6个有效随机数以及每个随机数的访问器方法的票证的正确方法,而且我也不确定如何在构造函数中调用有效参数和构造函数中不调用参数之间切换

RandomNumber
是一个生成随机数的类,我确信它可以工作

我不确定这是否是一个包含6个有效随机数以及每个随机数的访问器方法的票证的正确方法,而且我也不确定如何在构造函数中调用有效参数和构造函数中不调用参数之间切换

最简单的方法是通过两个构造函数来区分这两个条件。使用默认构造函数根据生成的随机数构造票据,使用非默认构造函数使用用户提供的6个数字

到目前为止,你所拥有的东西不能没有数字。提供的构造函数不能用作默认构造函数。如果为
x1
x6
提供了默认参数(例如在类定义中),则可以,但代码没有提示这一点

原始代码覆盖提供的数字,这样做没有什么意义,要么使用数字,要么生成数字

// default constructor...
PowerballTicket::PowerballTicket()
: mball1(0), mball2(0), mball3(0), mball4(0), mball5(0), mpowerball(0)
// you could exclude the above initialisations, the will be written to below
{
    // generate the random numbers
    RandomNumber randNum (1, 69);
    mball1 = randNum.random();
    do {
        mball2 = randNum.random();
    }while (mball1 == mball2);
    do {
        mball3 = randNum.random();
    }while (mball3 == mball1 || mball3 == mball2);
    do {
        mball4 = randNum.random();
    }while (mball4 == mball1 || mball4 == mball2 || mball4 == mball3);
    do {
        mball5 = randNum.random();
    }while (mball5 == mball1 || mball5 == mball2 || mball5 == mball3 || mball5 == mball4);
    RandomNumber randNumPower (1, 23);
    mpowerball = randNumPower.random();
}

PowerballTicket::PowerballTicket(int x1, int x2, int x3, int x4, int x5, int x6)
: mball1(x1), mball2(x2), mball3(x3), mball4(x4), mball5(x5), mpowerball(x6)
{
    // use the numbers provided
}
默认构造函数生成数字,非默认构造函数使用为对象成员提供的数字

使用代码

PowerballTicket myNumbers(1, 2, 3, 4, 5, 6); // non-default constructor
PowerballTicket generatedNumbers; // default constructor

创建两个构造函数1参数化,1为空

如果调用空构造函数,则创建6个随机数并调用参数化构造函数

PowerballTicket::PowerballTicket()
{
    RandomNumber randNum (1, 69);
    x1 = randNum.random();
    do {
        x2 = randNum.random();
    }while (x1 == x2);
    do {
        x3 = randNum.random();
    }while (x3 == x1 || x3 == x2);
    do {
        x4 = randNum.random();
    }while (x4 == x1 || x4 == x2 || x4 == x3);
    do {
        x5 = randNum.random();
    }while (x5 == x1 || x5 == x2 || x5 == x3 || x5 == x4);
    RandomNumber randNumPower (1, 23);
    mpowerball = randNumPower.random();
    PowerballTicket(x1,x2,x3,x4,x5, mpoerBall);
}

PowerballTicket::PowerballTicket(int x1, int x2, int x3, int x4, int x5, int x6)
{
 //constructor already have value do what you want
    mball1 = x1;
    mball2 = x2;
    mball3 = x3;
    mball4 = x4;
    mball5 = x5;
    mpowerball = x6;

}

接受参数的构造函数也是生成随机数的构造函数。此构造函数接受六个参数并丢弃它们。重点是什么?你想让构造函数在没有参数的情况下做什么不同的事情呢?很抱歉造成混淆。我想让用户输入6个数字,或者如果没有调用参数,票据将生成6个随机数字…
PowerballTicket(x1、x2、x3、x4、x5、mporeball)创建一个临时对象(它不会在同一个对象上“调用另一个构造函数”),我们可以使用它(x1、x2、x3、x4、x5、mporeball);不,你也不能那样做。您可以创建两个构造函数都调用的第三个函数,或者(更简单地说)只分配成员。
(0)
的初始化是多余的,因为您总是在以后分配值。我知道,但在这种情况下,我还是喜欢运行初始化。
RandomNumber
的异常是未知的,作为示例代码,我希望构造函数之间保持一致。