Массив в конструкторе С++

Недавно познакомился с классами, но при попытке передать массив в конструктор программа программа создает объект заполненный нулями(насколько я понимаю).

class interpritation {
public:
    int params[4]{};
    interpritation(int(&params)[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 шт):

Автор решения: Harry
interpritation(int(&par)[4]) { copy(par, par + 4, params); }

спасет отца русской демократии... (с) О. Бендер

→ Ссылка
Автор решения: αλεχολυτ

Проблема в том, что при выполнении кода конструктора

copy(params, params + 4, params);

params ссылается исключительно на аргумент конструктора. Т.е. вы копируете массив в самого себя. Член класса при этом не изменяется вовсе. Для разрешения ситуации можно либо дать различные имена члену-данных и аргументу конструтора, либо там, где требуется член, использовать this, например:

copy(params, params + 4, this->params);

В данной ситуации ещё хорошим подспорьем могла бы выступить константность. Т.к. входной массив не планируется изменять, аргумент конструктора логично было объявить как const int(&params)[4]. В этом случае запись

copy(params, params + 4, params);

просто не скомпилировалась бы, что позволило бы скорее понять в чём причина.

→ Ссылка