默认构造函数c ++随机数有效吗?

时间:2013-04-14 02:27:27

标签: c++ statistics default

我是c ++的新手,我对默认构造函数并不熟悉。我被要求编写一个名为Stats的类,并在默认构造函数中编写一个构造函数,该构造函数使用随机数生成器在minValue和maxValue之间生成sampleSize int,然后将其存储在名为data []的数组中。到目前为止,每当我使用默认构造函数时,我只会将它们初始化为零或null。我不确定如何使用这些设置指令编写默认构造函数,以便我的代码可以正确运行而不会出现错误。这就是我所拥有的

#include <iostream>

using namespace std;

class Stats
{
private:
    int sampleSize, minValue, maxValue;
    int data[];

public:
    Stats()
    {
        sampleSize = 0;
        minValue = 0;
        maxValue = 0;
        data[] = sampleSize;
    }
    Stats(int samleSize, int min, int max)
    {
        samplesize = samleSize;
        minValue = min;
        maxValue = max;
    }

3 个答案:

答案 0 :(得分:0)

data[] = sampleSize;

在C ++中是无效的语法。您无法使用该数组初始化数组。

同时,data[]没有类型。你应该做

int data[];

您还需要先为data数组分配内存,然后尝试使用随机数生成器将数字放入其中。

答案 1 :(得分:0)

所以到目前为止,我可以告诉你想要在int中保存一个动态大小的data数组,你当前的语法是不正确的,但这些行中的某些东西应该是你正在寻找的东西对于。首先data必须是pointer

int *data;

然后你的构造函数看起来像这样:

Stats()
{
    sampleSize = 0;
    minValue = 0;
    maxValue = 0;
    data = NULL;
}

Stats(int samleSize, int min, int max)
{
    sampleSize = samleSize;
    minValue = min;
    maxValue = max;
    data = new int[sampleSize] ;
}

在课程中有pointer后,您还需要destructor,以便释放与pointer相关联的内存,它应该与此类似:< / p>

~Stats()
{
  if( NULL != data )
  {
     delete [] data ;
  }
}

这假设你需要为你的作业坚持动态分配的内存,如果你被允许使用std::vector那么这就变成了一个更简单的问题,data变成了这个:

 std::vector<int> data ;

您根本不需要担心分配,然后当您需要向其添加数据时,您只需拨打push_back

 data.push_back( randomNumber ) ;

答案 2 :(得分:0)

您可以使用std::vector获取数据。由于所有实例的大小都不固定。

class Stats
{
private:
    int sampleSize, minValue, maxValue;
    vector<int> data;
    ^^^^^^^^^^^^^^^^

public:
    Stats()
    {
        sampleSize = 0;
        minValue = 0;
        maxValue = 0;
        data.reserve(sampleSize); // Just to avoid reallocations.

    }