![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 21.07.2017
Сообщений: 12
|
![]()
здравствуйте, я начал недавно учить программирование, меня немного мучает один вопрос. предположим есть какой-то определенный класс, в main() имеется определение экземпляра класса, например:
Код:
вот например когда имеется определение int ix = 0; понятно что ix конкретно идентифицирует ячейку со своим адресом и значением. может быть под капотом в данной инструкции передается управление конструктору по-умолчанию и тогда данный объект будет иметь все свойства конструктора? а во второй инструкции все свойства функции getSize()? кстати, что происходит в четвертой инструкции? почему, когда я использовал & с операндом в виде имени a, я получил адрес первого члена данных в private? надеюсь понятно спросил, просто мне это важно знать, как это все работает. ![]() ______________________ Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум. Последний раз редактировалось Alex11223; 05.08.2017 в 16:57. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
Непонятный вопрос.
Что такое "свойства функции"? myClass& это ссылка на экземпляр.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 05.08.2017 в 17:01. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 09.04.2017
Сообщений: 598
|
![]()
"какое конкретно значение и адрес имеет a в первой инструкции?"
Если у вас в классе не прописан конструктор, то конструктором по умолчанию объект "а" будет размещен хрен знает по какому адресу и хрен знает с каким значением, и будет дожидаться вашей инициализации. "вот например когда имеется определение int ix = 0; понятно что ix конкретно идентифицирует ячейку со своим адресом и значением." В этом случае вы тоже не назначаете ячейку, не выявляете её (нужны определённые операторы), вы инициализируете переменную ix значением 0, опять таки хрен знает по какому адресу. a.getSize(); Тут надо понимать что делает функция getSize(), каково её тело. myClass& ref = a; ref.getSize(); судя по второй строке, в первой происходит создание объект ref, а во второй он вызывает функцию getSize() Но зачем ссылка? Тем более объекту может быть равен как я понимаю только такой же объект. А для этого столько наворотить надо с перегрузкой "=".... почему, когда я использовал & с операндом в виде имени a, я получил адрес первого члена данных в private? Вы бы класс myClass показали... |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]() Цитата:
В смысле зачем? Мало ли зачем, в коде ж просто пример использования. нет, ссылка же. Хоть вообще удалите = (сделать private или в С++11 delete).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
![]() |
![]() |
![]() |
#5 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 | |||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Вызовется конструктор по умолчанию (который без параметров). Если никакого конструктора для класса не писали, то он автоматом пустой сгенерируется. Адрес - какой повезёт.
Цитата:
![]() Цитата:
что такое свойства функции? Просто для объекта a вызывается метод getSize. Нет никаких свойств и т.п. Сначала вызвался конструктор для объекта a, который этот объект привёл к какому-то состоянию (а может ничего не сделал). Потом вызвали для объекта метод getSize, который может как-то изменил состояние объекта, а может просто вернул значение, тут нужно смотреть опять чего в этом методе написано. по сути 4 эквивалент 2. Один и тот же метод вызывается для одного и того же объекта. Цитата:
Что как хранится и происходит написано в стандарте языка. Еще в книгах пишут такое. |
|||
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 21.07.2017
Сообщений: 12
|
![]()
pu4koff,
Спасибо!) Простите, я еще много не пониманию, насчет "свойств" не берите в голову) Задам последний вопрос и все на этом пока что, если вопрос я задам не правильный, еще раз извините. Вот например класс: Код:
|
![]() |
![]() |
![]() |
#8 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
![]()
Что значит "по сути"? lvalue, грубо говоря, - это то конкретное место, куда будет сохранён результат операции. В памяти может быть одновременно тысяча экземпляров объекта. И в каждом из них есть своё поле с. Нужно же как-то выделить из тысячи то единственное, которое и примет значение на этот раз
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
В принципе, да.
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]()
....добавлю, ссылки - это синтаксический сахар языка, для указателей. В ассемблерном коде они заменены на указатели. Т.о. размер самой ссылки = размеру указателя в системе (реально столько памяти выделит), но это "сахар", так что, работая со ссылкой, вы как - бы работаете с оригинальным объектом.
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Определение типа класса по переменной на объект этого класса при компиляции | phomm | Общие вопросы Delphi | 24 | 08.04.2011 14:11 |
Шаблоны - нужно создать объект класса abc в котором вместо aa использовался бы объект класса fff? | Farrel | Общие вопросы C/C++ | 2 | 13.11.2010 17:37 |
Параметр конструктора класса = объект этого класса | nazavrik | Общие вопросы C/C++ | 6 | 14.02.2010 13:48 |
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? | TwiX | Общие вопросы Delphi | 3 | 15.11.2009 00:54 |
Размер имеет значение | Xenofibrius | Общие вопросы Delphi | 3 | 20.04.2008 23:38 |