Здесь ошибка на ошибке, давайте разбираться. Имеется класс 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, то надо записать так:
Answers & Comments
Ответ:
Объяснение:
Здесь ошибка на ошибке, давайте разбираться. Имеется класс 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.