(Код С++)(ООП) Найти и обосновать ошибку в коде
Complex &cref, n, x;
cref=&n;
&cref=x;

Ответы

Ответ дал: alexshor
3

Ответ:

Объяснение:

Здесь ошибка на ошибке, давайте разбираться. Имеется класс Complex и мы создаем объекты этого класса. Правильное создание объектов класса выглядит так:

Complex n,x;

Запись в первой строке:

Complex &cref;

Указывает компилятору, что не надо создавать объект, а надо создать ссылку на объект, при этом ссылка должна сразу быть инициализирована! В этой же строке. Т.е. вот такая запись будет корректной:

Complex n,x;

Complex &cref=n;

В этом случае объект cref не будет создан, cref будет ссылаться на объект n.

Дальше вторая строка:

cref=&n;

Запись &n возвращает указатель на объект, т.е. Complex*, с указателем также можно работать как и со ссылкой, но в отличии от записи Complex &cref запись Complex *cref не обязательна к инициализации и может быть нулевой:

Complex n,x;

Complex *cref=0;

cref=&n;

Ну и наконец третья строка:

&cref=x;

В левой части записана операция получения указателя на объект cref (Complex*), этот указатель нельзя менять: слева от знака равенства должно располагаться "изменяемое" значение (lvalue)

Непонятно, что хотел автор. Если хотелось изменить значение, на которое указывает cref, то надо записать так:

*cref=x;

В этом случае значение x будет скопировано туда, куда указывает указатель cref. Полный код в этом случае:

Complex n,x;

Complex *cref=&n;

*cref=x;

После этого значение n станет равным x.

Или другой вариант: если хотелось, чтобы указатель cref указывал на объект x, то надо записать так:

cref=&x;

После этого cref будет указывать на объект x.

Вас заинтересует