Массив в конструкторе С++
Недавно познакомился с классами, но при попытке передать массив в конструктор программа программа создает объект заполненный нулями(насколько я понимаю).
class interpritation {
public:
int params[4]{};
interpritation(int(¶ms)[4]) { copy(params, params + 4, params); }
void show() {
for (int i = 0; i < 4; i++) {
cout << params[i] << " ";
}
cout << endl;
}
};
int main()
{
int first[4]{ 0,0,1,1 };
interpritation f(first);
f.show();
}
Вместо ожидаемого вывода 0 0 1 1 программа выводит 0 0 0 0. Как правильно передавать массив в конструктор?
Ответы (2 шт):
interpritation(int(&par)[4]) { copy(par, par + 4, params); }
спасет отца русской демократии... (с) О. Бендер
Проблема в том, что при выполнении кода конструктора
copy(params, params + 4, params);
params ссылается исключительно на аргумент конструктора. Т.е. вы копируете массив в самого себя. Член класса при этом не изменяется вовсе. Для разрешения ситуации можно либо дать различные имена члену-данных и аргументу конструтора, либо там, где требуется член, использовать this, например:
copy(params, params + 4, this->params);
В данной ситуации ещё хорошим подспорьем могла бы выступить константность. Т.к. входной массив не планируется изменять, аргумент конструктора логично было объявить как const int(¶ms)[4]. В этом случае запись
copy(params, params + 4, params);
просто не скомпилировалась бы, что позволило бы скорее понять в чём причина.