Это теоретический вопрос, о котором я и мои коллеги обсуждали. Я скоро попробую сам, но я подумал, что это интересная тема для новичка.
Давайте представим, что есть базовый класс «VEHICLE» и производные классы, такие как «CAR» и «TRUCK» …
(где «VEHICLE» является абстрактным классом и не может быть создан).
Все идет нормально. Теперь вы создаете автомобиль с именем A: автомобиль А;
и постоянная ссылка на A с именем B: const car& B = A;
Давайте предположим, что класс «CAR» имеет функцию broken_door. Мои вопросы теперь следующие: когда я звоню A.broken_door ();
что будет с B, поскольку B является константой и эталонным объектом?
заранее спасибо
Ничего не случится с B
, Было бы продолжать ссылаться на A
, который будет изменен.
const
Значит это B
не может быть использован для изменения объекта, к которому он относится. Это не значит, что объект не может измениться другими способами.
B
это просто ссылка на A
это дает вам другое имя для того же объекта.
const car& B = A;
волшебным образом не поворачивается A
в постоянный объект, который не может быть изменен, это просто означает, что вы не можете изменить его через B
.
Вы все еще можете изменить объект, изменив A
напрямую или через другой (неконстантный) указатель или ссылку.
«B» и «A» — это разные названия одной и той же вещи.
Разница между ними заключается в том, что вы не можете называть вещь «В», если хотите ее изменить.
(«Постоянная ссылка» — это не ссылка на объект, который не изменится, это ссылка, через которую изменение запрещено.)
Немного ошибочная аналогия: вы можете использовать имя «molbdnilo» в качестве «константной ссылки» на меня (потому что это относится ко мне, но вы не можете изменить меня).
Тем не менее, если я изменю свой профиль stackoverflow, вы все равно увидите изменение, если вы посмотрите на него.