0

我是 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;
    }
4

3 回答 3

0
data[] = sampleSize;

在 C++ 中不是有效的语法。你不能用它来初始化一个数组。

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

int data[];

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

于 2013-04-14T02:28:10.623 回答
0

因此,据我所知,您希望int保存一个动态大小的 s数组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它应该看起来像这样:

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

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

 std::vector<int> data ;

而且您根本不需要担心分配,然后当您需要向其中添加数据时,您只需调用push_back

 data.push_back( randomNumber ) ;
于 2013-04-14T02:36:08.940 回答
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.

    }
于 2013-04-14T02:39:37.073 回答