Может ли перегрузка рассматриваться как реализация полиморфизма? Если они одинаковы, то почему используются два разных слова?Полиморфизм и перегрузка C++?
ответ
Да, перегрузка является формой статического полиморфизма (время компиляции полиморфизм). Однако в C++ выражение “ полиморфный класс ” относится к классу с по меньшей мере одной виртуальной функцией-членом. I.e., в C++ термин “ полиморфный ” сильно связан с динамическим полиморфизмом .
Термин override используется для предоставления производной виртуальной функции для определенного класса. В некотором смысле это замена. Перегрузка , напротив, просто предоставляет дополнительное значение для имени функции.
Пример динамического полиморфизма:
struct Animal
{
virtual auto sound() const
-> char const* = 0;
};
struct Dog: Animal
{
auto sound() const
-> char const* override
{ return "Woof!"; }
};
#include <iostream>
using namespace std;
auto main()
-> int
{
Animal&& a = Dog();
cout << a.sound() << endl;
}
Пример статического полиморфизма:
#include <iostream>
using namespace std;
template< class Derived >
struct Animal
{
void make_sound() const
{
auto self = *static_cast<Derived const*>(this);
std::cout << self.sound() << endl;
}
};
struct Dog: Animal<Dog>
{
auto sound() const -> char const* { return "Woof!"; }
};
auto main()
-> int
{ Dog().make_sound(); }
Примечания:
¹ За исключением случаев, когда это тени значения, предусмотренные в базовом классе.
Да, перегрузка является формой статического полиморфизма, Ad hoc полиморфизм, если быть точным.
Это не динамический полиморфизм (подтипирование), к которому обычно относятся люди в контексте C++.
https://en.wikipedia.org/wiki/Polymorphism_(computer_science)
- 1. Перегрузка и полиморфизм операторов C++
- 2. C++: Полиморфизм и перегрузка оператора
- 3. Перегрузка и полиморфизм
- 4. Полиморфизм и перегрузка
- 5. Полиморфизм и перегрузка функций?
- 6. Перегрузка функций C++ (функциональный полиморфизм)
- 7. динамический полиморфизм в C++ и перегрузка функций
- 8. Полиморфизм и перегрузка путаницы операторов в C++
- 9. Перегрузка двоичных операторов и полиморфизм
- 10. почему перегрузка не поддерживает полиморфизм
- 11. Полиморфизм в объекте C
- 12. C++: Наследование и перегрузка разрешение
- 13. C Союзы и полиморфизм
- 14. Наследование и полиморфизм C++
- 15. C++, полиморфизм и итераторы
- 16. C# Наследование и полиморфизм
- 17. C++ unique_ptr и полиморфизм
- 18. C++ полиморфизм и нарезка
- 19. Перегрузка метода также известна как статический полиморфизм?
- 20. Неужели перегрузка не подпадает под полиморфизм?
- 21. Наследование Java и полиморфизм
- 22. Перегрузка друга и перегрузка оператора в C++
- 23. Перегрузка операторов ++ и - C#
- 24. C# Полиморфизм
- 25. Полиморфизм C++
- 26. Ускорение и полиморфизм в C++
- 27. полиморфизм и массив указателей (C++)
- 28. Полиморфизм и связь в C#
- 29. C++ - непрерывная память и полиморфизм
- 30. Наследование и полиморфизм в C#
Перегрузка не имеет ничего общего с виртуальными функциями и наследованием. Вы можете перегружать методы в одном классе. следовательно, 2 разных слова. –
Переопределение и перегрузка - две совершенно разные вещи. Вы спрашиваете об переопределении? –
Да, перегрузка - это форма статического (компиляционного) полиморфизма. Однако в C++ выражение «полиморфный класс» относится к классу с хотя бы одной виртуальной функцией-членом. I.e., в C++, этот термин сильно связан с динамическим полиморфизмом –