|
14.07.2015, 19:22
|
Новичок на форуме
|
|
Регистрация: 14.07.2015
Сообщений: 6
|
|
почему в первом варианте вот это "d.c.e = 77;" не тронуло исходное t? а во втором варинте, та же конструкция без return затронула t
|
|
14.07.2015, 19:32
|
Новичок на форуме
|
|
Регистрация: 14.07.2015
Сообщений: 6
|
|
я так понимаю, return возвращает копию чтоли, а не ссылку на локальную переменную?
|
|
14.07.2015, 21:18
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Именно так. Самая мякотка что потребуется метод для модификации этой приватной проперти, ибо наружное изменение никакого влияния на внутренности не окажет.
|
|
14.07.2015, 21:32
|
Аспирант
|
|
Регистрация: 23.06.2015
Сообщений: 53
|
|
Сообщение от ivan_antonov
|
в этом варианте исходное t
|
тебе уже пояснили, ты создаешь своей ф-ей 2 разных объекта, никакого исходного (общего для них обоих) t не существует, для каждого оно локально. return тут вообще не при чем, что ты ему скажешь то он вернет.
|
|
14.07.2015, 21:34
|
Аспирант
|
|
Регистрация: 23.06.2015
Сообщений: 53
|
|
Сообщение от ivan_antonov
|
я так понимаю, return возвращает копию чтоли, а не ссылку на локальную переменную?
|
твой ретурн возвращает не копию и не ссылку, он возвращает новый объект. выражение {...} означает: создать новый объект(экземпляр Object) с (опционально) такими-то полями
Последний раз редактировалось jackdempsey2015, 14.07.2015 в 21:37.
|
|
14.07.2015, 22:54
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от jackdempsey2015
|
он возвращает новый объект
|
А почему наружные изменения этого "возвернутого" объекта не проникают внутрь функции?
Я просто подумал что ТС привел пример с двумя объектами в порядке преобразования реальной задачи к абстрактной для форума, чтоб никто как не догадался что он там задумал. Поскольку задавать вопрос об ингрессе двух отдельных никак не связанных объектов это нонсенс.
|
|
14.07.2015, 23:01
|
Аспирант
|
|
Регистрация: 23.06.2015
Сообщений: 53
|
|
Сообщение от kostyanet
|
А почему наружные изменения этого "возвернутого" объекта не проникают внутрь функции?
|
в каком смысле? ЯННП
|
|
14.07.2015, 23:30
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Ну в каком смысле - если снаружи в этот объект записать число, то внутри в этом объекте такого числа не будет.
Разумеется внутри делается объект по имени и он возвращается. Разницы тут никакой в том самом смысле.
|
|
14.07.2015, 23:32
|
Аспирант
|
|
Регистрация: 23.06.2015
Сообщений: 53
|
|
kostyanet,
Короче, я завтра собираюсь бухать, если не забуду, я после поллитра гляну твое сообщение.
|
|
15.07.2015, 13:11
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
в этом варианте исходное t не тронуто, а в нижнем модифицирует
|
Тронуто, просто и на "d" и на "b" приходится своя собственная копия "t".
Цитата:
|
я так понимаю, return возвращает копию чтоли, а не ссылку на локальную переменную?
|
Не совсем.
Не существует никаких локальных переменных. Каждый вызов функции Test создает новую область видимости, в которой создаются абсолютно новые переменные, в которые записываются ссылки на абсолютно новые объекты.
Сообщение от safort
|
Нет. Ты каждый раз создаёшь новый объект.
|
Сообщение от рони
|
каждый раз Test() создаёт новый обьект
|
Сообщение от foo
|
твой ретурн возвращает не копию и не ссылку, он возвращает новый объект.
|
|
|
|
|