Форум программистов, компьютерный форум CyberForum.ru

Бьерн Страуструп второе издание ошибка в моей голове или в коде? - C++

Восстановить пароль Регистрация
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
19.11.2011, 21:26     Бьерн Страуструп второе издание ошибка в моей голове или в коде? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            void expr::copy(expression* s, int deep)
            {
              if (deep == 0) { // копируем только члены
                 *this = *s;
              }
              else { // пройдемся по указателям:
                 left = s->clone(1);  [COLOR="Red"]  //!!!!!!!!!!!![/COLOR]
                 right = s->clone(1);
                 // ...
              }
            }
 
            expr* expr::clone(int deep)
            {
              expr* r = new expr();  // строим стандартное выражение
              r->copy(this,deep);    // копируем `*this' в `r'   [COLOR="red"]!!!!!!!!!!!!![/COLOR]
              return r;
}
я считаю что произойдёт бесконечная рекурсия прав ли я?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 21:26     Бьерн Страуструп второе издание ошибка в моей голове или в коде?
Посмотрите здесь:

Страуструп.Язык программирования С++.3(спец.)издание.Глава4.Упражнение7 - возникли вопрос C++
C++ namespace Страуструп 3-е издание
Калькулятор из книги Язык программирования С++ (автор Бьерн Страуструп) C++
C++ книгa "Программирование: принципы и практика использования C++, исправленное издание, Бьярне Страуструп;
C++ Ответы на книгу Бьерн Страуструп Программирование - Принципы и практика с помощью C + +
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.11.2011, 21:42     Бьерн Страуструп второе издание ошибка в моей голове или в коде? #2
Цитата Сообщение от Van111 Посмотреть сообщение
я считаю что произойдёт бесконечная рекурсия прав ли я?
не прав, в expr::copy стоит проверка которая недопустит этого
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
19.11.2011, 21:44  [ТС]     Бьерн Страуструп второе издание ошибка в моей голове или в коде? #3
Цитата Сообщение от Jupiter Посмотреть сообщение
не прав, в expr::copy стоит проверка которая недопустит этого
но
r->copy(this,deep); передаст 1 в качестве deep
а это вызывает
left = s->clone(1);
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.11.2011, 21:54     Бьерн Страуструп второе издание ошибка в моей голове или в коде? #4
по этому куску кода трудно что либо сказать, но я бы рекомендовал взять 3-е издание книги и еще отдельно почитать про рекурсивный спуск
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
19.11.2011, 21:57  [ТС]     Бьерн Страуструп второе издание ошибка в моей голове или в коде? #5
Цитата Сообщение от Jupiter Посмотреть сообщение
по этому куску кода трудно что либо сказать, но я бы рекомендовал взять 3-е издание книги
то есть ошибки в книге имеются?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.11.2011, 22:03     Бьерн Страуструп второе издание ошибка в моей голове или в коде? #6
Цитата Сообщение от Van111 Посмотреть сообщение
то есть ошибки в книге имеются?
во 2-м издании да, об этом говорит сам Бьерн Страуструп в предисловии к 3-му
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
19.11.2011, 22:09  [ТС]     Бьерн Страуструп второе издание ошибка в моей голове или в коде? #7
Цитата Сообщение от Jupiter Посмотреть сообщение
по этому куску кода трудно что либо сказать
ну вот смотрите вызывается copy с параметром(я про deep) 1 !!
выполняется left = s->clone(1) ,параметр равен одному !!!!!
выполняется r->copy(this,deep) с параметром один !!
выполняется left = s->clone(1) ,параметр равен одному !!!!!

Добавлено через 6 минут
Цитата Сообщение от Jupiter Посмотреть сообщение
рекомендовал взять 3-е издание книги
дайте ссылку для скачивание пожалуйста
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2011, 22:12     Бьерн Страуструп второе издание ошибка в моей голове или в коде?
Еще ссылки по теме:

Кто читал Бьярне Страуструп Программирование: принципы и практика использования C++, исправленное издание C++
Страуструп 3 издание в электронном виде C++
Бьерн Страуструп. Инсталляция библиотеки FLTK C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.11.2011, 22:12     Бьерн Страуструп второе издание ошибка в моей голове или в коде? #8
Цитата Сообщение от Van111 Посмотреть сообщение
дайте ссылку для скачивание пожалуйста
это противоречит правилам форума!
Yandex
Объявления
19.11.2011, 22:12     Бьерн Страуструп второе издание ошибка в моей голове или в коде?
Ответ Создать тему
Опции темы

Текущее время: 01:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru