![]() |
|
Модераторы: bsa |
![]()
|
|
| Zerstroer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: 1 Всего: 3 |
Здравствуйте.
Решил взяться порешать задачки по C++. Систематизировать мусор в голове. В качестве задачника решил использовать учебник Роберта Лафоре "ООП в С++". При решении задач из главы 9 возник ряд вопросов. Прошу более опытных товарищей помочь. Вопрос первый. Упражнение 2, главы 9. Нижеприведенный листинг взят из правильных решений с сайта издательства книги:
Проблема возникает при вызове из конструктора класса Pstring::Pstring( char s[] ) конструктора родительского класса String(s). Вместо конструктора с одним аргументом String( char s[] ), в данном месте вызывается конструктор родительского класса БЕЗ аргументов String(). С чем эта ситуация связана? Вопрос 2. Уражнение 8, главы 9. Задание: 8. В некоторых языках, таких как Visual Basic, есть операции, с помощью которых можно выделить часть строки и присвоить её другой строке. (В стандартном классе string предложены различные подходы. Использую наследование, добавьте такую возможность в класс Pstring из упражнения 2 (листинг решенного упражнения я выложил выше). В новом производном классе Pstring2 разместите три новых функции: left(), mid() и right(). s2.left(s1, n) //В строку s2 помещаются n самых левых символов строки s1 s2.mid(s1, s, n) //В строку s2 помещаются n символов из строки, начиная с символа номер s s2.right(s1, n) //В строку s2 помещаются n самых правых символов строки s1 Вы можете использовать цикл for для копирования символ за символом подходящих частей строки s1 во временный объект класса Pstring2, который затем их возвратит. Для получения лучшего результата используйте в этих функциях возврат по ссылке, что бы они могли быть использованы с левой стороны знака "равно" для изменения части существующей строки. Вот текст задания. Решение выполнил так:
Возникла сложность с "возвратом по ссылке", для получения возможности использовать слева от знака "равно". Как это правильно реализовать в контексте данной задачи? Прошу привести, если есть возможность пример. У Лафоре эта тема затронута вскользь, самостоятельно освоить, как видите, терпения не хватило. Заранее спасибо. -------------------- In silico |
||||
|
|||||
| Result |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 15.5.2011 Репутация: 3 Всего: 5 |
По первому вопросу:
Нужно в списке инициализации дочернего класса передавать параметр(ы) в конструктор базового
Когда список инициализации не задан, для подходящих членов классов, будут вызваны конструкторы по умолчанию т.е. примерно так (только есть особенности когда подставляются нули):
Что является полным соответствием (высший приоритет при разрешении перегрузки) конструктору по умолчанию базового класса. Это сообщение отредактировал(а) Result - 6.9.2011, 20:37 |
||||
|
|||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: 1 Всего: 3 |
Благодарю Resut за точное объяснение половины проблемы.
Относительно второй части вопроса, нашел некое подобие объяснения вот здесь: Решение проблемы на другом форуме Суть приблизительно понял (относительно указателей, еще не читал), но с реализацией верной возникли проблемы. Пока остановился вот на этом:
Однако, желаемого эффекта всё же не достиг. -------------------- In silico |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
слишком много воды и не видно сути вопроса..
но new использованное в последнем коде однозначно лишнее.. Если left должно изменить содержимое объекта к которому ее применяете, то this в помощь.. Добавлено через 1 минуту и 39 секунд если проблема в том, что при возвращении *this, какие то проблемы с результатом, то скорей всего накосячили с констуркторами.. алсо, вначале, сформулируйте четко вопрос и даже Вам самим станет понятно, где искать на него ответ.. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |