2014-12-03 2 views
-2

Это теоретический вопрос, о котором мы и мои коллеги обсуждали. Я скоро попробую это, но я подумал, что это интересная тема для новичка.Модификация постоянного задания

Предположим, что существует базовый класс «АВТОМОБИЛЬ» и производные классы, такие как «CAR» и «TRUCK» ... (где «АВТОМОБИЛЬ» является абстрактным классом и не может быть создан).

Пока все хорошо. Теперь вы создаете автомобиль под названием A: автомобиль A;
и константа ссылки на A по названию B: const car & B = A;

Предположим, что класс «CAR» имеет функцию broken_door. Мои вопросы теперь следующие: Когда я звоню A.broken_door(); Что произойдет с B, поскольку B является константой и ссылочным объектом?

Спасибо заранее

+1

'B' является константой _reference_ и, таким образом, является эквивалентом' A'. Что должно произойти с 'B' на самом деле? Это все еще _reference_. –

+1

'B' будет продолжать ссылаться на' A'. Вот что делает ссылка. Обратитесь к чему-то еще. – juanchopanza

ответ

2

Ничего не случится с B. Он будет продолжать ссылаться на A, который будет изменен.

const означает, что B не может быть изменен. Это не означает, что объект не может измениться другими способами.

2

B просто ссылка на A, что дает другое имя для того же объекта.

const car& B = A; не магически превратить A в постоянный объект, который не может быть изменен, это просто означает, что вы не можете изменить его через B.

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

1

«B» и «A» - разные названия для одной и той же вещи.
Разница между ними заключается в том, что вы не можете ссылаться на вещь как «B», если хотите ее изменить.
(А «Const ссылка» не является ссылкой на объект, который не будет меняться, это ссылка, через которую запрещено изменение.)

Несколько недостатков аналогия: вы можете использовать имя «molbdnilo» как «const reference» для меня (потому что это относится ко мне, но у вас нет возможности меня модифицировать).
Тем не менее, если я изменил свой профиль stackoverflow, вы все равно увидите изменение, если будете смотреть на него.