| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Длина и сдвиг строки - Полиморфизм |
| Автор: ArniLand 22.4.2010, 19:38 | ||
| Написал программу по полиморфизму и виртуальным функциям которая измеряет длину строки и сдвигает строку(чтобы первый символ стал последним). Но программа выдает не правильный результат. Помогите исправить пожалуйста, чтобы программа выводила правильный результат. Результат: http://piccy.info/view3/30805/7fdb7ee9cd485aced7140a75c70918e9/ Код программы:
|
| Автор: toxx 22.4.2010, 20:25 |
| при наследовании в производном классе не нужно объявлять её как виртуальную. |
| Автор: ArniLand 22.4.2010, 20:27 | ||
| toxx, то есть просто убрать virtual в производных классах? Добавлено через 4 минуты и 10 секунд toxx, вот убрал я virtual в методах производных классов, но результат выбивает такой же как выше на скриншоте
|
| Автор: toxx 22.4.2010, 20:55 | ||||
Ну еще нужно правильно написать конструкторы, они у вас точно не верные...
|
| Автор: ArniLand 22.4.2010, 20:55 |
| подскажите пожалуйста, что я не так написал в конструкторах? |
| Автор: toxx 22.4.2010, 21:10 | ||||||
Например так, для другого сами по аналогии напишите
Еще добавьте виртуальный метод
И соответственно в приватную часть переменную длинны
И думаю всё заработает как нужно =) Добавлено через 1 минуту и 32 секунды Также если по хорошему делать добавьте еще конструкторы по ссылке, по умолчанию, и перегрузку оператора=. |
| Автор: toxx 23.4.2010, 10:27 | ||||
azesmcar просто сколько видел в книгах в теме с полиморфизмом пишут такие примеры.
|
| Автор: azesmcar 23.4.2010, 10:32 | ||||
Да, потому что если функция в базовом классе объявлена как виртуальная, то функция наследника автоматически становится виртуальной
|
| Автор: toxx 23.4.2010, 10:42 |
| azesmcar Да я понимаю о чем вы =) но всё же как писать правильно? то что работает это конечно понятно, но есть наверно какие то правила? я думаю не надо писать лишнего или как... просто чтобы на будующее знать как советовать людям=) Когда читал тему про виртуальные функции классы и все эти тонкости заглянул в Страуструпа, там он не объявлял виртуальными функции в производных классах(если в базовом функции чисто виртуальная). |
| Автор: azesmcar 23.4.2010, 10:46 |
| toxx Это вопрос стиля, я предпочитаю писать, так сразу видно в наследниках что функция виртуальная..не надо лезть в исходники родителя чтобы посмотреть. |
| Автор: toxx 23.4.2010, 10:55 |
| azesmcar хмм понятно, вы прям моё мнение изменили к этой теме. а вот если по теме, я правильно забраковал конструкторы автора?(просто там тупо можно было типа изменить у функций, которые длину строки изменяют на int(char LengthofRow()), но мне я думаю правильнее сначала разбораться с конструкторами, так как такое создание очень плохое на мой взгляд и то что это будет работать не оправдание в данной ситуации) просто никто не отвечает больше, а мне когда один отвечаю как-то прям неуютно. |
| Автор: djamshud 23.4.2010, 11:08 |
| azesmcar, этот подход тоже не лишен недостатка. В наследнике можно создать новую виртуальную функцию (для будущих поколений) и разбирайся потом в наборе виртуальных функций, виртуальны они от самого корня или нет. Исходя из этих соображений никогда не использую "лишнее" virtual. ЗЫ. Сорри за тавтологию. |
| Автор: azesmcar 23.4.2010, 12:32 | ||||||
я и не говорил что он идеален
в смысле копирование? да, конечно..нo и тут есть вопросы
|
| Автор: toxx 23.4.2010, 12:43 | ||
Да спасибо(узнал о правильности совета), насчет замечаний я старался обойтись без сторонних функций =) |
| Автор: djamshud 23.4.2010, 12:57 |
| >просто никто не отвечает больше, а мне когда один отвечаю как-то прям неуютно. Воспитывайте уверенность в себе). >я старался обойтись без сторонних функций =) Это стандартная функция, заменяющая ненужные и медленные три строчки кода. |
| Автор: toxx 23.4.2010, 13:05 | ||
djamshud
ну вот как тут можно воспитать её если как не напишу, так медленно =) как оценить скорость работы функции к слову? |
| Автор: azesmcar 23.4.2010, 13:09 |
визуально, с помощью тестов. |