![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
wowka19 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
При
срабатывает A(); а мне допустим этого не надо.. Даже при том, что реализация B(int) или B() срабатывает после A() и все можно переопределить, то зачем мне тратить такты ЦП впустую... И еще вопрос. Если при наследовании меня устраивает работа конструктора с параметрами родительского класса, т.е. A(int), то как мне им воспользоваться для инициализации потомка? или придется тупым копипастом реализовать такой же конструктор в классе B? |
||||
|
|||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
тебе этого не надо, а в конструкторе класса инициализируются переменные класса А и не тебе решать будет он вызываться или нет, пользуйся классом А таким как он есть. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
wowka19 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
borisbn, спасибо.
А первый вопрос не решаем? Добавлено через 7 минут и 33 секунды Dem_max, ОК. спасибо. borisbn, а если это касается конструктора копирования? здесь то
не прокатит - типы разные. |
|||
|
||||
wowka19 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
Появилась основная ПРОБЛЕМА!
в родительском классе я реализовал операции = и + однако в потомках они не работают так как возвращают объект типа родительского класса, а конструктор копирования или оператор присваивания потомка ожидают объект своего типа. Как быть такой ситуации? Неужели придется заново переопределять конкатенацию (+) и присваивание (=) ? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
wowka19, опишите основную задачу, может там наследование и не нужно..
|
|||
|
||||
wowka19 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
задание:
1. реализовать класс String; который хранит строку - char * data; и имеет операции сравнения строк (<,>,==,!=,<=,>=) а также конкатенацию (+) и присваивание (=). 2. Наследовать от него класс HexString; который следит за корректностью хранимых данных. То есть этот класс будет отличаться от родителя String только тем, что будет обнулять буфер data если он хранит не шестнадцатеричные символы. Я сделал класс String. Но в наследуемом им HexString не работают корректно = и + по понятным причинам. То есть HexString1 + HexString2 работает, а вот HexString3 = HexString1 + HexString2 и HexString3(HexString1 + HexString2) не работают так как = и + возвращают объект типа String в то время как HexString::HexString(const HexString &) ожидает объект типа HexString. Можно все нафиг перереализовать в классе HexString, но это как неправильно... Это сообщение отредактировал(а) wowka19 - 11.3.2012, 17:39 |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
и прут, и прут это наследование куда только могут...
использование наследования здесь никакого смысла не имеет обычно наследование применяют, если один класс выполняет все обещания базового в данном случае класс String не имеет ни намёка на ограничения на используемые символы поэтому, если ссылку на него передают в какую-нибудь функцию, она вправе ожидать, что "123"+"qqq" даст "123qqq", а не "" нужно чётко понять, зачем здесь наследование если просто для устранения дубликации кода - использовать приватное наследование (которое, по сути, не является наследованием в общепринятом понимании) -------------------- qqq |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
![]() |
||||
|
|||||
wowka19 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
не могу с вами не согласиться, ибо то что вы говорите более чем очевидно... но есть одна маленькая, но очень важная ФИГНЯ:
это требуется ПО ЗАДАНИЮ! вопрос открыт....( |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
wowka19, для класса HexString тоже надо писать свои конструктор копирования, оператор присваивания, конкатенации и пр.
|
|||
|
||||
wowka19 |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 30.11.2011 Репутация: нет Всего: нет |
Вроде выкрутился..
добавил в HexString конструктор копирования для родительского класса:
и добавил на всякий случай
в итоге все остальное осталось без изменений... конечно кривовато но задание выполнено.... всем спасибо! ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |