У вас есть класс Point, у которого есть метод Move.
Вы наследуете от него класс Line -- у него тоже будет метод Move, но переопределённый.
И так -- вы получаете целую иерархию классов, у которых есть метод Move.
То есть, метод Move будет работать для любого объекта -- это и есть "полиморфизм".
Другие языки программирования и технологии
объясните глупой что такое полиморфизм в с++.скока всего прочла и так и не могу понять((((
1 Переопределение операторов (можно почти все, кроме :: . .*)
2 Перегрузка глобальных функций (или функций в пределах namespace). Имя функции одно, функций несколько, со списком параметров, отличающихся количеством или типом параметров.
3 Перегрузка методов класса (так же как в 2) в рамках одного класса.
4 Переопределение метода класса в производном классе. В базовом классе - одна реализация метода, в производном классе - другая. Для получения полноценного полиморфизма переопределямый метод должен быть объявлен виртуальным как базовом, так и в производном классах. С не виртуальными методами могут возникнуть проблемы при некоторых обстоятельствах.
2 Перегрузка глобальных функций (или функций в пределах namespace). Имя функции одно, функций несколько, со списком параметров, отличающихся количеством или типом параметров.
3 Перегрузка методов класса (так же как в 2) в рамках одного класса.
4 Переопределение метода класса в производном классе. В базовом классе - одна реализация метода, в производном классе - другая. Для получения полноценного полиморфизма переопределямый метод должен быть объявлен виртуальным как базовом, так и в производном классах. С не виртуальными методами могут возникнуть проблемы при некоторых обстоятельствах.
полиморфизм - это свойство объектов принимать различные внешние формы в зависимости от обстоятельств. Это свойство позволяет использовать одно и тоже имя для обозначения сходных по смыслу действий и выбирать требуемое во время выполнения программы. Полиморфизм ООП связан с перегрузкой функций, но не тождественен ей.
Если отойти от программирования и попытаться найти примеры из жизни :-), то можно привести такие:
например, поведение продавца, когда ПОКУПАЕТ знакомый и ПОКУПАЕТ незнакомый покупатель.
например, собака ЧУЕТ запах еды и БЕЖИТ к миске, чтобы поесть и
собака ЧУЕТ запах кошки и БЕЖИТ за кошкой, чтобы поймать ее :-))
Если отойти от программирования и попытаться найти примеры из жизни :-), то можно привести такие:
например, поведение продавца, когда ПОКУПАЕТ знакомый и ПОКУПАЕТ незнакомый покупатель.
например, собака ЧУЕТ запах еды и БЕЖИТ к миске, чтобы поесть и
собака ЧУЕТ запах кошки и БЕЖИТ за кошкой, чтобы поймать ее :-))
struct Bird {
virtual void Speak() {
std::cout << "Я птичко" << endl;
}
};
struct Crow : Bird {
virtual void Speak() {
std::cout << "Кар!!! " << endl
}
};
int main() {
Bird * crow = new Crow;
crow->Speak();
Bird * bird = new Bird;
bird->Speak();
delete crow;
delete bird;
}
результат:
Кар!! !
Я птичко
Несмотря на то, что crow - указатель на базовый тип Bird, вызывается не его функция-член Speak(), а функция-член производного типа Crow. Функции-члены, помеченные определением virtual, как раз и являются полиморфными. Если бы Bird::Speak() не была помечена как virtual, в обоих случаях было бы выведено "Я птичко".
Аллегорически, примером полиморфизма может служить вопрос "Как вас зовут? ". Кого бы в не спросили, смысл вопроса будет одним и тем же, хотя разные люди будут отвечать на него по-разному: здесь вопрос будет интерфейсом, общим для всех людей, а ответ будет зависить от конкретного человека. Вам, в свою очередь, совершенно не нужно знать, почему отвечающий носит именно такое имя, а не какое-то другое - это полиморфизм вкупе с инкапсуляцией :)
virtual void Speak() {
std::cout << "Я птичко" << endl;
}
};
struct Crow : Bird {
virtual void Speak() {
std::cout << "Кар!!! " << endl
}
};
int main() {
Bird * crow = new Crow;
crow->Speak();
Bird * bird = new Bird;
bird->Speak();
delete crow;
delete bird;
}
результат:
Кар!! !
Я птичко
Несмотря на то, что crow - указатель на базовый тип Bird, вызывается не его функция-член Speak(), а функция-член производного типа Crow. Функции-члены, помеченные определением virtual, как раз и являются полиморфными. Если бы Bird::Speak() не была помечена как virtual, в обоих случаях было бы выведено "Я птичко".
Аллегорически, примером полиморфизма может служить вопрос "Как вас зовут? ". Кого бы в не спросили, смысл вопроса будет одним и тем же, хотя разные люди будут отвечать на него по-разному: здесь вопрос будет интерфейсом, общим для всех людей, а ответ будет зависить от конкретного человека. Вам, в свою очередь, совершенно не нужно знать, почему отвечающий носит именно такое имя, а не какое-то другое - это полиморфизм вкупе с инкапсуляцией :)
Одна и та же функция может вызываться для совсем разных целей. А реализация распознается компилятором по параметрам.
Похожие вопросы
- Что такое return. Объясните по простому, уже несколько статей и видеоуроков посмотрел, но так и не могу понять.
- помогите пожалуйста, не могу понять что за ошибка и как ее решить (((
- Помогите. Не могу понять как работает поиск максимального элемента массива!!
- Не могу понять где элемент массива?
- Язык си, не могу понять динамическое выделение памяти.
- Хочу изучить SQl но никак не могу понять как использовать ее на практике. Помогите разобраться!!!
- Что такое сборка windows? не могу понять( помогите плиз!
- c++ не могу понять в чем ошибка в небольшом примере
- для чего нужно модель OSI я тут не могу понять? помогите ((
- здравствуйте ,не давно начал изучать "язык програмиста" работаю в турбо паскале , не могу понят почему программа