Как передать массив в класс в переполнении стека

Когда я создаю класс, я хотел бы иметь возможность хранить массив в этом классе. Это возможно?

Например. Если у меня есть класс под названием массив для хранения массива из моей основной функции

int main()
{
double nums[3] = {1 2 3}
array Vnums(nums)
return 0
}

class array
{
public
//constructor
array(double nums[])
{
double vector[] = nums;
}// end constructor
}// end array

Спасибо!

1

Решение

использовать std::array вместо необработанного массива. Он похож на необработанный массив, но копируемый и имеет полезные функции-члены.

class array
{
std::array<double, 3> classArray;
public:
//constructor
explicit array(const std::array<double, 3>& rhs)
:classArray(rhs)
{}// end constructor
}// end arrayint main()
{
std::array<double, 3> nums = {{1 2 3}};
array Vnums(nums)
return 0
}

или может быть std::vector если вы хотите иметь возможность изменить размер по желанию

class array
{
std::vector<double> classArray;
public:
//constructor
explicit array(const std::vector<double>& rhs)
:classArray(rhs)
{}// end constructor
}// end arrayint main()
{
std::vector<double> nums{1 2 3}; //C++11 feature
array Vnums(nums)
return 0
}

Я не уверен, что ты делаешь, поэтому трудно дать твердый совет. Вы можете передать необработанный массив по ссылке, указателю и счетчику, паре итераторов …

3

Другие решения

Да, но вы должны либо динамически распределять массив при создании класса, либо массив всегда должен иметь одинаковый размер.

Вариант А:

class array{
private:
double* data;
unsigned size;
public:
array(double* d, unsigned s){
size = s;
data = new double[size];
for(unsigned i = 0; i < s; i++)
data[i]=d[i];
}
array(const array& copy){
double* temp = new double[copy.size];
delete [] data;
data = temp;
size = copy.size;
for(unsigned i = 0; i < size; i++)
temp[i]=copy.data[i];
}
array& operator= (const array& copy){
double* temp = new double[copy.size];
delete [] data;
data = temp;
size = copy.size;
for(unsigned i = 0; i < size; i++) data[i]=copy.data[i];
}
~array(){
delete[] data; // Don't forget the destructor!
}
};

Вероятно, это именно тот способ, который вам нужен, но обратите внимание, что вам почти наверняка понадобятся пользовательский конструктор копирования и оператор присваивания, чтобы не распределять память между несколькими экземплярами этого класса. Лучшим способом может быть создание функции копирования, которую могут использовать оба.

Вариант Б:

class array{
private:
double data[3];
public:
array(double* d){ //or "double(&d)[3]" to be safer, but less flexible
for(unsigned i = 0; i < 3; i++){
data[i] = d[i]; // If d is not at least size 3, your program will crash here (or later on, or maybe just act in an undefined way)
}
}
}

Не проверял это, но это должно быть хорошей отправной точкой.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector