![]() |
|
Модераторы: bsa |
![]()
|
|
| ArniLand |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 17.8.2008 Репутация: нет Всего: нет |
Написал программу по полиморфизму и виртуальным функциям которая измеряет длину строки и сдвигает строку(чтобы первый символ стал последним). Но программа выдает не правильный результат. Помогите исправить пожалуйста, чтобы программа выводила правильный результат.
Результат: ![]() Код программы:
Это сообщение отредактировал(а) ArniLand - 22.4.2010, 19:47 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
при наследовании в производном классе не нужно объявлять её как виртуальную.
|
|||
|
||||
| ArniLand |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 17.8.2008 Репутация: нет Всего: нет |
toxx, то есть просто убрать virtual в производных классах?
Добавлено через 4 минуты и 10 секунд toxx, вот убрал я virtual в методах производных классов, но результат выбивает такой же как выше на скриншоте
|
|||
|
||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Ну еще нужно правильно написать конструкторы, они у вас точно не верные...
|
||||
|
|||||
| ArniLand |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 17.8.2008 Репутация: нет Всего: нет |
подскажите пожалуйста, что я не так написал в конструкторах?
Это сообщение отредактировал(а) ArniLand - 22.4.2010, 20:56 |
|||
|
||||
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Например так, для другого сами по аналогии напишите
Еще добавьте виртуальный метод
И соответственно в приватную часть переменную длинны
И думаю всё заработает как нужно =) Добавлено через 1 минуту и 32 секунды Также если по хорошему делать добавьте еще конструкторы по ссылке, по умолчанию, и перегрузку оператора=. Это сообщение отредактировал(а) toxx - 22.4.2010, 21:10 |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
во первых не "не нужно" а "можно не писать", а во вторых это никак не влияет на работу программу. ArniLand выдели неработающую часть, мы люди ленивые, читать 100 строк кода никому не охота, помоги нам помочь тебе. |
|||
|
||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
azesmcar просто сколько видел в книгах в теме с полиморфизмом пишут такие примеры.
|
||||
|
|||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Да, потому что если функция в базовом классе объявлена как виртуальная, то функция наследника автоматически становится виртуальной
Это сообщение отредактировал(а) azesmcar - 23.4.2010, 10:34 |
||||
|
|||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
azesmcar
Да я понимаю о чем вы =) но всё же как писать правильно? то что работает это конечно понятно, но есть наверно какие то правила? я думаю не надо писать лишнего или как... просто чтобы на будующее знать как советовать людям=) Когда читал тему про виртуальные функции классы и все эти тонкости заглянул в Страуструпа, там он не объявлял виртуальными функции в производных классах(если в базовом функции чисто виртуальная). |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
toxx
Это вопрос стиля, я предпочитаю писать, так сразу видно в наследниках что функция виртуальная..не надо лезть в исходники родителя чтобы посмотреть. |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
azesmcar
хмм понятно, вы прям моё мнение изменили к этой теме. а вот если по теме, я правильно забраковал конструкторы автора?(просто там тупо можно было типа изменить у функций, которые длину строки изменяют на int(char LengthofRow()), но мне я думаю правильнее сначала разбораться с конструкторами, так как такое создание очень плохое на мой взгляд и то что это будет работать не оправдание в данной ситуации) просто никто не отвечает больше, а мне когда один отвечаю как-то прям неуютно. Это сообщение отредактировал(а) toxx - 23.4.2010, 10:55 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
azesmcar, этот подход тоже не лишен недостатка. В наследнике можно создать новую виртуальную функцию (для будущих поколений) и разбирайся потом в наборе виртуальных функций, виртуальны они от самого корня или нет. Исходя из этих соображений никогда не использую "лишнее" virtual.
ЗЫ. Сорри за тавтологию. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
я и не говорил что он идеален в смысле копирование? да, конечно..нo и тут есть вопросы
Это сообщение отредактировал(а) azesmcar - 23.4.2010, 12:34 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 4 Всего: 13 |
Да спасибо(узнал о правильности совета), насчет замечаний я старался обойтись без сторонних функций =) |
|||
|
||||
![]()
|
| Правила форума "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. |