LINUX.ORG.RU

Подкиньте задачек для студентов про полиморфизм в C++

 


0

2

Надо мне студентам придумать несколько задач на тему наследования, виртуальных функций, интерфейсов. Ничего путного не приходит в голову и не гуглится. Так как есть следующие условия: Не требуется STL, Не требуются сторонние библиотеки (в тч системные), Только консольный ввод-вывод



Последнее исправление: CatsCantFly (всего исправлений: 1)
Ответ на: комментарий от Bobby_

Да, но я предлагаю только шаблоны оберток. AddObj не шаблон, а void AddObj(Object const &o); , и живет в .cpp

Это чисто ява-подход. Диспетчеризация будет в AddObj

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Bobby_

Да и вообще, чего я придумываю. Использовать void Add(Object const &o); в паблике, не надо никаких шаблонов. В контейрере храняться объекты-наследники Object

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Bobby_

А я не понял, в чем проблема c реализацией параметрического полиморфизма на основе общего родителя Object? Это же самый наивный подход к созданию либы контейнеров на C++.

Deleted
()
Ответ на: комментарий от Deleted

Еще раз, кто в рантайм будет делать приведение типа и проверку, чтобы пользователь в список котов не смог добавить собаку?

Bobby_
()
Ответ на: комментарий от anonymous

В С++ все проверки делает компилятор, а потом угар и содомия на твоей совести никто ничего тебе проверять не будет.

Bobby_
()
Ответ на: комментарий от Deleted

Я вообще жду, что если язык поддерживает парам. полиморфизм, то все вопросы с типами разруливает сам компилятор, или я не прав?

Bobby_
()
Ответ на: комментарий от Bobby_

Ты правильно и удачно выше расписал про отличия и виды полиморфизмов. Но странно не видишь отличие теоретического определения от реализации в языке. В С++ есть параметрический полиморфизм, он используется вполне определенным образом, это не секрет для разработчиков на C++. Поэтому исходный посыл, с чем я и спорю, на мой взгляд, не верен.

В отличие от упомянутого С#, в C++ можно реально задействовать как и параметрический, так и ad-hoc полиморфизмы. (Ну, перегрузка методов тривиальна и я не её имею ввиду).

Deleted
()
Ответ на: комментарий от Deleted

dynamic_cast - это антипаттерн. К тому же он тормозной как хрен.

rupert ★★★★★
()
Ответ на: комментарий от Deleted

При таком подходе можно сказать, что в С++ есть GC? Только он используется определенным образом. Только программист на С++ должен ручками все написать, а не автоматически, как это работает в java.

Bobby_
()
Ответ на: комментарий от Bobby_

Нет, gc там нет. И его реализация затруднительна в рамках существующей модели памяти в С++. Также, как нет паттерн матчинга, например.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.