Другие языки программирования и технологии

объясните глупой что такое полиморфизм в с++.скока всего прочла и так и не могу понять((((

У вас есть класс Point, у которого есть метод Move.
Вы наследуете от него класс Line -- у него тоже будет метод Move, но переопределённый.
И так -- вы получаете целую иерархию классов, у которых есть метод Move.
То есть, метод Move будет работать для любого объекта -- это и есть "полиморфизм".
Валера Ищенко
Валера Ищенко
85 092
Лучший ответ
1 Переопределение операторов (можно почти все, кроме :: . .*)
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, в обоих случаях было бы выведено "Я птичко".
Аллегорически, примером полиморфизма может служить вопрос "Как вас зовут? ". Кого бы в не спросили, смысл вопроса будет одним и тем же, хотя разные люди будут отвечать на него по-разному: здесь вопрос будет интерфейсом, общим для всех людей, а ответ будет зависить от конкретного человека. Вам, в свою очередь, совершенно не нужно знать, почему отвечающий носит именно такое имя, а не какое-то другое - это полиморфизм вкупе с инкапсуляцией :)
Одна и та же функция может вызываться для совсем разных целей. А реализация распознается компилятором по параметрам.
Игорь Зотов
Игорь Зотов
4 335