198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
|
||||||
1 | ||||||
Оператор суммирования (классы, перегрузка операторов)27.05.2013, 21:21. Показов 1961. Ответов 7
Метки нет (Все метки)
Правильно ли я понимаю, что в строке 14 (var + r.get()) var относится к объекту one, потому что вызывается при помощи этого объекта (в частности one.plus(two) ), а r.get() уже имеет отношение к объекту two т.к. мы передавали этот объект (в частности one.plus(two) ), там он принимался и т.д. Верно я все понимаю? Добавлено через 1 минуту И еще вопрос, что именно возвращает строка 14, просто 5 или mat(5) ?
0
|
27.05.2013, 21:21 | |
Ответы с готовыми решениями:
7
Классы: перегрузка операторов Классы и методы, перегрузка операторов == и != Перегрузка операторов, оператор присваивания Классы, матрицы, перегрузка операторов, дружественные функции |
45 / 45 / 12
Регистрация: 12.03.2013
Сообщений: 167
|
|
27.05.2013, 21:22 | 2 |
1
|
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
|
|
27.05.2013, 21:23 [ТС] | 3 |
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
27.05.2013, 21:25 | 4 |
mat(var + r.get()) вызывает конструктор mat(int a) { var = a; } и таким образом создает временный объект mat. Потом он передается по значению (копируется, но не забываем NRVO) и присваивается three.
1
|
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
|
||||||
27.05.2013, 21:30 [ТС] | 5 | |||||
Второй вопрос но по той же тематике:
Кликните здесь для просмотра всего текста
Правильно ли я понимаю, что в данном случае в строчке 24, + является оператором относящимся к классу mat, а точнее является функцией членом - operator+ и в данной строчке (24) этот плюс имеет отношение к объекту one а в качестве передаваемых параметров является объект two т.е. в строчке 14 var имеет отношение к объекту one и равен 2, а r.get() уже имеет отношение к объекту two т.к. мы передавали этот объект, правильно я все понимаю? Добавлено через 32 секунды т.е. mat(5) ?
0
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
||||||
27.05.2013, 21:32 | 6 | |||||
Да.
А чтобы возникло меньше таких вопросов в учебниках рекомендуют делать так (для понимания):
1
|
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,235
|
|
27.05.2013, 21:43 [ТС] | 7 |
Не по теме: Я сначала начал разбирать 2-й пример и очень долго не мог въехать что происходит в строке 24, потом вернулся на пример назад, разобрал его, и начал въезжать во 2-й пример, ну вот и решил убедится окончательно.
0
|
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 5
|
||||||
05.03.2015, 12:12 | 8 | |||||
То что вызывается конструктор при, применении оператора +, то логично. И то что оператор вызывает функцию для перегрузки плюса тоже логично. Но в этих ответах нету никакой "философии", т.е. я не хочу сказать, что ответ не правильный, а скорее ответ не разъясняет саму суть. К примеру, с операторами пре и пост инкрементов и декрементов все воспринимается легко, т.к. эти операторы применяются к одному объекту и лигично, что фун-я перегрузки будет вызываться из того же объекта и по флагу передачи int определяется - будет применятся пре или пост инкр. декр. Вот, а теперь не ясно что делает оператор + в вызывающей функции, как он "знает" из какого объекта ему вызывать функцию перегрузки? Ведь программа начинает работу не из интерфейса, то логично. И не ясно откудого он "знает" какое значение присваивать, т.е. левое или правое. Хотелось бы въехать поглубже, понять откудого ноги растут, иначе как строить уже алгоритм, если не въехал в суть, а просто запомнил. Надеюсь я доступно задал свой вопрос. И надеюсь кто-то мне поможет с ответом)
Добавлено через 34 минуты В дополнение к вопросу, могу сказать, что не разобравшись к какому из объектов применяется вызов функции перегрузки(ФП), и какой передается в качестве параметра, можно сделать вывод, что: 1)ФП вызывается для обоих объектов, и каждый суммируется друг с другом, значит, как-бы, результат в объекте three будет за двоен; 2)оператор + вызовет ФП для обоих объектов и они просуммируют сами себя, тут вообже непонятка))) Ошибка компиляции пересадки головного мозга, короче хрень. Добавлено через 1 час 39 минут Нашел в нете такой кусок. Наталкивает на некоторые мысли. Но я не уверен полностью. Таки как это работает?
0
|
05.03.2015, 12:12 | |
05.03.2015, 12:12 | |
Помогаю со студенческими работами здесь
8
Классы. Перегрузка операторов для комплексного числа Нужен код, в котором есть: Классы, Наследование, Виртуальная функция, Перегрузка операторов Перегрузка операторов. Инкапсуляция. Сделать так, чтобы оператор >> находил разницу между датами. Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |