我是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;
}
答案 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.
}