Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
188 / 162 / 82
Регистрация: 01.07.2016
Сообщений: 914
1

Полиморфизм

14.07.2019, 10:59. Показов 821. Ответов 11
Метки нет (Все метки)

Является ли перегрузка функций полиморфизмом? Шаблонные функции тоже одна из разновидностей полиморфизма? И зачем нужны шаблонны если существует способ автовывода(auto) типа?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2019, 10:59
Ответы с готовыми решениями:

Полиморфизм
Я хотел реализовать множество, используя множественное наследование, но когда написал template...

Полиморфизм
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом...

Полиморфизм
Помогите сделать в коде полиморфизм. Тему особо не понимаю Если что, базовый класс - "Страна" и...

Полиморфизм
Здравствуйте :) Я пытался читать про полиморфизм. Читал-читал, но не очень дошло. Понял, что можно...

11
488 / 285 / 128
Регистрация: 30.10.2018
Сообщений: 1,309
14.07.2019, 11:52 2
Цитата Сообщение от no swear Посмотреть сообщение
Является ли перегрузка функций полиморфизмом?
перегрузка? Имеется ввиду метод родительського класс но с иными параметрами? Скорее нет.

Если имелось ввиду "переопределения" - то да.

Если функция, не в классе, то полиморфизм тут не причем.

Цитата Сообщение от no swear Посмотреть сообщение
Шаблонные функции тоже одна из разновидностей полиморфизма?
Нет, тут скорее для удобства сделано, ведь не хочется писать одну и ту же функцию для нескольких типов.

Цитата Сообщение от no swear Посмотреть сообщение
И зачем нужны шаблонны если существует способ автовывода(auto) типа?
Шаблоны нужны что бы задать классу/функции/методу определенный тип. Шаблон это не синтаксис, он связан с языком. И без того же шаблона, не было бы списков, все пользовались бы массивами (или самописными списками).
1
15104 / 8106 / 1956
Регистрация: 30.01.2014
Сообщений: 13,771
14.07.2019, 11:57 3
Цитата Сообщение от no swear Посмотреть сообщение
Является ли перегрузка функций полиморфизмом?
Да. Читайте про ad-hoc.

Цитата Сообщение от no swear Посмотреть сообщение
Шаблонные функции тоже одна из разновидностей полиморфизма?
Да. Читайте про статический полиморфизм.

Цитата Сообщение от no swear Посмотреть сообщение
И зачем нужны шаблонны если существует способ автовывода(auto) типа?
Ну начать надо с того, что шаблоны появились гораздо раньше.
4
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
14.07.2019, 12:32 4
Цитата Сообщение от no swear Посмотреть сообщение
Является ли перегрузка функций полиморфизмом?
Нет единого определения понятия полиморфизм. Это характерно для практически любого, даже самого базового понятия в программировании. С точки зрения определения
Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов
Не любая перегрузка подходит. Если количество данных совпадает, а набор их типов (или порядок их следования) - различны, то перегрузка подпадает под данное определение.
По определению Б. Страуструпа
один интерфейс — много реализаций
то же самое.
Однако, понятие воспринимается достаточно интуитивно. Когда интерфейс ограничивают именем функции, то любая перегрузка по данному определению относится к полиморфизму.
То есть, отсутствие точных определений делает точные вопросы несколько неосмысленными.
Цитата Сообщение от Гамлетовский вопрос
Как правильно:
1+2=3
или
2+1=3
??
1
188 / 162 / 82
Регистрация: 01.07.2016
Сообщений: 914
14.07.2019, 14:02  [ТС] 5
Цитата Сообщение от DrOffset Посмотреть сообщение
Да. Читайте про ad-hoc.
Цитата Сообщение от DrOffset Посмотреть сообщение
Да. Читайте про статический полиморфизм.
Можете пожалуйста дать свои источники, книжку или ссылку не на англ языке а то у меня с ним плоховато



Цитата Сообщение от DrOffset Посмотреть сообщение
Ну начать надо с того, что шаблоны появились гораздо раньше.
А что если говорить о сегодняшнем дне, где уместнее использовать шаблоны а где auto? К примеру как будет лучше написать функцию, написать её с параметрами auto или написать с шаблоном?

Добавлено через 3 минуты
Цитата Сообщение от kitsoRik Посмотреть сообщение
Если функция, не в классе, то полиморфизм тут не причем.
Почему это так?
Цитата Сообщение от IGPIGP Посмотреть сообщение
Не любая перегрузка подходит. Если количество данных совпадает, а набор их типов (или порядок их следования) - различны, то перегрузка подпадает под данное определение.
По определению Б. Страуструпа
тут вроде IGPIGP, ничего не говорил о классах
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
14.07.2019, 15:44 6
Цитата Сообщение от no swear Посмотреть сообщение
тут вроде IGPIGP, ничего не говорил о классах
Подтверждаю, - IGPIGP (я то есть), ни чего о классах не говорил напрямую. Там речь о типах идёт. А разговор о перегрузке функций без обсуждения типов не полон. Хотя да, - можно перегружать только количеством тех или иных параметров, но это лишь частный случай и он имеет нименьшее отношение к полиморфизму программных объктов. Кстати о программных объектах. Программные объекты (функции в частности) являются типизированными объектами. Иначе мы начнем говорить о полиморфизме как таковом. Многообразие (греч.) слишком многообразно. Для кода , например, это мутирующий код. Хакерский приём для кода с изменяющейся сигнатурой. То есть, совсем другой компот.
Иначе говоря, без типов не получится об этом поговорить.
1
15104 / 8106 / 1956
Регистрация: 30.01.2014
Сообщений: 13,771
14.07.2019, 16:22 7
Цитата Сообщение от no swear Посмотреть сообщение
Почему это так?
Это не так. Язык С++ мультипарадигменный, и полиморфизм (концептуально) в нем может быть реализован разными способами в зависимости от задачи и целей, которых нужно достигнуть.

Цитата Сообщение от no swear Посмотреть сообщение
Можете пожалуйста дать свои источники, книжку или ссылку не на англ языке а то у меня с ним плоховато
А какого именно плана вам нужны источники? На русском мало литературы, и, прежде чем что-то советовать, хотелось бы узнать чего вы ждете от источника для себя?
Можете для начала прочитать статью на википедии. Там же есть довольно большой список литературы.

Цитата Сообщение от no swear Посмотреть сообщение
А что если говорить о сегодняшнем дне, где уместнее использовать шаблоны а где auto? К примеру как будет лучше написать функцию, написать её с параметрами auto или написать с шаблоном?
Во-первых auto не заменяет шаблоны, а дополняет.
Во-вторых функцию с auto-параметрами в стандартном C++ написать (пока что) нельзя (можно только лямбду).
1
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,371
14.07.2019, 16:29 8
В третьих нельзя использовать auto в классах вместо типа поля (за исключением случая когда поле является static const)
1
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
14.07.2019, 16:40 9
Цитата Сообщение от no swear Посмотреть сообщение
И зачем нужны шаблонны если существует способ автовывода(auto) типа?
Шаблон, это вообще не средство автовывода. auto помогает программисту, возлагая на компилятор работу по определению типа для подстановки. Шаблон - описатель способа генерации кода по полученным конкретным параметрам. Задачи совершенно разные. А вообще, такой "легонький" вопросик не в тему. Вывод аргументов шаблона, едва ли не самая сложная тема языка, который можно назвать простым лишь шутя.
1
5 / 4 / 1
Регистрация: 19.04.2015
Сообщений: 33
14.07.2019, 18:05 10
Вот в английской Википедии как раз про это написано:

Function overloading allows programs to declare multiple functions having the same name but with different arguments (i.e. ad hoc polymorphism).
Templates in C++ provide a sophisticated mechanism for writing generic, polymorphic code (i.e. parametric polymorphism).
https://en.wikipedia.org/wiki/C%2B%2B#Polymorphism
1
Эксперт С++
8426 / 4099 / 894
Регистрация: 15.11.2014
Сообщений: 9,200
14.07.2019, 18:15 11
Цитата Сообщение от no swear Посмотреть сообщение
где уместнее использовать шаблоны а где auto?
вопрос из серии:
где уместнее использовать молоток, а где микроскоп?
где уместнее использовать грузовик, а где легковушку?

узнай что такое "грузовик", и зачем он нужен.
затем узнай, что такое "легковушка", и зачем она нужна.

и не будет у тебя возникать таких вопросов.


Цитата Сообщение от IGPIGP Посмотреть сообщение
Шаблон, это вообще не средство автовывода.
найди 10ть принципиальных отличий?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template<class t>
void trololo(const t& arg) noexcept
{
    std::cout << arg << '\n';
}
 
void ololo(const auto& arg) noexcept
{
    std::cout << arg << '\n';
}
 
auto olala = [](const auto& arg) noexcept
{
    std::cout << arg << '\n';
};
 
int main()
{
    trololo(1);
    ololo(1);
    olala(1);
}
компиляторы изначально с бородатых времен умели выполнять вывод типов.

например, в следующем выражении:
C++
1
getWidget().setXY(0,0);
компилятору, что бы понять,
по отношению к чему применяется setXY(0,0),
нужно сначала понять,
чем является результат getWidget()

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

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

и вот тут на сцену выходит ключевое слово auto,
в нынешнем его виде.

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

и вуаля!
появилась возможность писать auto в качестве возвращаемого значения.
функции вида: auto createWidget();

официально, в аргументах покамест не дозволяется:
warning: ISO C++ forbids use of ‘auto’ in parameter declaration [-Wpedantic]
хотя и поддерживается, например gcc.

но это временно, просто не успели пофиксить в с++17
в след. стандарте запилят.
2
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
14.07.2019, 19:30 12
Цитата Сообщение от hoggy Посмотреть сообщение
найди 10ть принципиальных отличий?
Для простых примеров их нет. Но тема рискует оторваться от новичковской. Как всегда.
Мне известны два способа специализации шаблонных функций. Как известно, шаблонные функции не поддерживают частичную специализацию. Вследствие этого можно либо
1) Перегрузить конкретными перегрузками имя шаблона. То есть, понаписать конкретных не шаблонных функций.
2) Вставить внутрь шаблонной функции вызов оператора () шаблонного функтора, определение которого, видно из определения шаблонной функции. И, соответственно, специализировать функтор.
Первый вариант подходит лишь для небольшого количества вариантов, в силу своей многословности. И кроме того, много подобных перегрузок могут заступорить компилятор. То есть, он порой, не может вызвать правильную перегрузку даже когда неоднозначности нет (если верить достаточно авторитетным авторам).
Второй вариант универсален и выразителен.
hoggy, буду признателен если вы покажете как передать auto параметр в шаблон. decltype(arg)?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2019, 19:30

Полиморфизм
Хай :senor: class MyPrint//производный класс { public: MyPrint() { cout &lt;&lt; &quot;Constructor...

Полиморфизм
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое...

Полиморфизм
В одной дешевой книжке про него пишут а в другой дорогой нет и понять я почему то немогу точно как...

Полиморфизм c++
Построить массив из указателей (базового типа) на объекты обоих классов. Выбрать объекты...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.