Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: runtime vs compile polymorphism  (Прочитано 10818 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 26-09-2009 09:45 » 

вроде бы немного почитал про шаблоны, немного про виртуальные функции и возник вопрос:

как вы на проектах определяете, когда стоит пользоваться шаблоном, а когда виртуальными функциями?


« Последнее редактирование: 27-09-2009 19:10 от Вад » Записан

1n c0de we trust
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 26-09-2009 09:54 » 

Mayor, Вообше то у шаблонов и виртуальных функций разная область применения. Почти не пересекаюшаяся. Так что я не пойму, что вызывает у тебя затруднение в выборе между двумя методами.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Mayor
Специалист

ru
Offline Offline

« Ответ #2 : 26-09-2009 10:08 » 

незнание их областей применения, из-за того что только что почитал и то и другое - не понимаю, что лучше подсунуть классу параметр или указатель на объект с виртуальными фукнциями
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 26-09-2009 10:24 » 

Mayor,

 виртуальная функция позволяет выполнять метод потомка через указатель на родителя

шаблон позволяет описать семейство классов
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 26-09-2009 10:31 » 

Проше говоря.
Когда у тебя стоит задача над разными типами данных совершить одни и теже действия - это шаблон.
Когда у тебя стоит задача переопределить действия у класса. То это полиморфизм и виртуальные функции. При этом никто не запрешает применять полиморфизм в шаблонах. Просто не рекомендуют этим заниматься. Так как количество кода будет не пропорцианально расти, при формировании и компиляции программы.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Mayor
Специалист

ru
Offline Offline

« Ответ #5 : 26-09-2009 15:21 » 

че то абстрактность плохо переваривается...

калькулятор работающий с целыми, произвольной точностью, комплексными числами - лучше всего впишется в шаблон?
список, контейнер - лучше в шаблон?

где лучше использовать виртуальные функции, чем шаблоны?

пользовательский интерфейс?
3д объекты?
регэкспы?

Записан

1n c0de we trust
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 26-09-2009 16:02 » 

Все шаблоны в самой программе преврашаются в обычные классы. В рунтайме шаблонов совсем нет. Все исчезают на стадии компиляции. И созданы только для одной цели, облегчить программисту жизнь. Чтобы он меньше пользовался технологией copy-paste при написании кода программы. Например vector<int> list; ты уже конкретизируеш шаблон. И кстати не все функции шаблонов будут расмотрены компилятором. А только те, которые ты используеш. Если например ты не используеш size, то она не будет скомпилорована в код программы. Это кстати одна из причин, которая плодит код если делать полиморфные шаблоны. Кстати точность вычеслений калькулятора можно регулировать и без шаблона. Вычислять на максимальной точности. А пользователю отдавать ту точность, к которой он готов.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Mayor
Специалист

ru
Offline Offline

« Ответ #7 : 27-09-2009 05:23 » 

те
если объекту не нужно передавать параметры типов, то полиморфизм не нужен

если параметры типов известны на этапе компиляции ( тот же элемент контейнера например), то можно пользоваться шаблоном

если тип самого объекта или объекта на который он ссылается будут известны только на этапе выполнения, то придется пользоваться рантайм полиморфизмом?

...

рылся в инете по данной теме и только что наткнулся на объявление виртуальной функции в шаблоне, это поддерживается msvc9 и g++ 4.3 ?
« Последнее редактирование: 27-09-2009 06:20 от Mayor » Записан

1n c0de we trust
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #8 : 27-09-2009 10:27 » 

Mayor, Читай теорию. Ты все мои рассуждения перевернул с ног на голову. Что на некоторых форумах расценивается как троллинг.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Mayor
Специалист

ru
Offline Offline

« Ответ #9 : 28-09-2009 11:07 » 

дак я и читаю теорию, если понимаю что написано, пишу код подтверждающий усвоение теории практикой

если не понимаю как по этой теории писать код, спрашиваю на форумах

зы то быдлокодером обзывают, то троллем Улыбаюсь

ззы тут то кого собственно говоря троллить?
все из тех, кто что-то здесь представляет,  знают всех других, кто что-то из себя представляет и после аномизации грома уже давно друг с другом не ругаются
Записан

1n c0de we trust
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #10 : 28-09-2009 11:25 » 

Твой вопрос равносилен
Цитата
вроде бы немного почитал про знак плюс, немного про знак умножить и возник вопрос:

как вы на проектах определяете, когда стоит пользоваться прибавлением, а когда умножением?

Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Mayor
Специалист

ru
Offline Offline

« Ответ #11 : 28-09-2009 12:42 » 

твоя цитата напоминает вопрос с собеседования у мелкомягких, можно наплести че нить типа:

ну так как * приоритетнее +, то следует употреблять * в тех случаях когда операция при разборе выражения должна выполниться в первую очередь, с другой стороны операция * на гомогенных выражениях с заданным свойством нуля позволяет в отличие от +, провести проверку попадания в выражение нулевого(неопределенного) операнда по получении результата, без кропотливых проверок каждого операнда требуемых для гомогенных + выражений Улыбаюсь
Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 28-09-2009 14:01 » new

Mayor, то есть, если ты хочешь посчитать 4+3 (хы) , то ты посчитаешь 4*3==12 , ведь * приорететнее ? Улыбаюсь)
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines