|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.12.2012, 16:58 | #21 | |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
Цитата:
если вас = папа + мама. или вас = вас + вас. дело в том что, вы меняете содержимое объектов... этого нельзя делать...
Если помог, тут весы есть , Вам не сложно, а мне приятно.
|
|
21.12.2012, 17:10 | #22 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Как-то Вы формулируете не ясно. Почему это портятся объекты?
Давайте конкретно. Итак, при вызове оператора копирования и при возврате ссылки *this портится .... Что? |
21.12.2012, 17:26 | #23 | |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
Цитата:
есть assign() и append(); я реализую 3 оператора приравнвание добавление и то и то сразу. Прошу обратить внимание, что ссылку на this я отправляю только в 3. Код:
1 оператор дубликат конструктора копии, ну за исключением деталей. 2 оператор создаёт новый объект не портя не текущий не в аргументе 3 оператор принимает удар изменений на себя.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
|
|
21.12.2012, 17:41 | #24 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Ссылка в C++ это по сути указатель, просто Страус для упрощения синтаксиса ее ввел.
То есть такая запись в принципе равнозначна Код:
Тем более, что в приведенном мной до этого коде это вообще не принципиально. Разумеется если бездумно подходить, то испортить можно всё. |
21.12.2012, 17:48 | #25 | |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
Цитата:
ну Янг писал, что i(a) вызывает конструктор напрямую i = a создаёт новый объект и следом конструктор копий. где то в одной из книг я у него вычитал. /----- насчёт бездумно да.... например как у автора. но он ещё больше замарался в new и delete. на его месте я бы реализовал функции отладил их.. и использовал в операторах. //------ а так я просто котегорически против ссылок. и уж тем более указателей в операторах типа +-/*= ибо я могу записать в с++ Код:
Код:
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Последний раз редактировалось Perchik71; 21.12.2012 в 17:55. |
|
21.12.2012, 18:07 | #26 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
Код:
Код:
Иное дело, когда нужна сквозная передача. Данные хранятся не в объекте, а где-то отдельно и нужно просто передать на них указатель. Бессмысленно каждый раз при этой передаче порождать новый объект. А именно это и происходит при выходе из функции String operator=. Я это так понимаю... |
21.12.2012, 18:13 | #27 | |
С++, Delphi
Форумчанин
Регистрация: 24.11.2012
Сообщений: 495
|
Цитата:
Печалько, что я так не могу. Идею вашу понял, но дисциплинировать себя, особенно в таком языке, я думаю будет не лишнем. Ведь кто знает в чьи лапы ваш объект попадёт.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
|
|
21.12.2012, 21:11 | #28 | ||
Пользователь
Регистрация: 03.11.2012
Сообщений: 89
|
Я не пропал, я заново перечитывал главу про это всё.
Цитата:
Цитата:
Именно! Ведь это дополнительные затраты ресурсов на создание нового объекта. В книге, которую я сейчас читаю приводится много аргументов в пользу использования ссылок и указателей где только возможно и не поощряется лишние копирования и создания копий. Друзья, я дико извиняюсь, но я мало понимаю ваши методы решения данного задания в силу того, что я сам еще мало знаю и мало умею. Я привык двигаться последовательно в обучении и не прыгать наперед. Ваши решения для меня еще пока темный лес. Я можно сказать только начал разбираться с классами и до наследования, друзей, повторного использования кода и т.д. мне еще далеко. Спасибо за проявленное внимание к теме, для себя я всё-равно подчерпнул много полезного. Буду разбираться дальше |
||
21.12.2012, 21:28 | #29 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Невозможно построить новый объект, не затратив времени на его постройку. Вот например: Код:
10 же не превратится в 15. То есть, все величины в правой части выражения не изменяться. Можно переписать это вот так: Код:
И единственный способ сделать это - это вернуть новый объект. Выражение а+b порождает невидимый временный объект, у которого даже нет имени. И именно значение этого невидимого объекта присваивается объекту c. Сначала a+b породят некий временный невидимый объект х, который будет суммой этих двух объектов. И только потом, объект с будет инициализирован значением этого невидимого x. Что касается производительности - современные компиляторы умеют оптимизировать такие вещи. Компилятор догадается выбросить промежуточный временный объект, и сразу же создаст объект c который будет являться суммой объектов a и b А объект с в любом случае нужно будет построить. Таким образом, время будет затрачено только на вычисление суммы двух старых объектов, и на строительство одного нового объекта. |
|
21.12.2012, 21:42 | #30 |
Пользователь
Регистрация: 03.11.2012
Сообщений: 89
|
Я это всё понимаю. Я имел в виду маленько другое... Ну предположим, например, если сравнить передачу аргументов функции по ссылке и по значению. Если мы передаем аргументы по значению то создается копия аргумента, а если по ссылке то нет.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выделение памяти | Dady 1992 | Общие вопросы C/C++ | 2 | 26.06.2012 18:45 |
Распределение памяти. Динамическое выделение памяти с++ | Tolian92 | Помощь студентам | 8 | 14.05.2012 21:44 |
Конструктор копирования и оператор присваивания | DenisS0 | Общие вопросы C/C++ | 4 | 05.12.2011 10:41 |
До выделение памяти | MAKTE | Общие вопросы C/C++ | 4 | 20.05.2008 21:34 |