Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/164: Рейтинг темы: голосов - 164, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 25

Что означает динамический и статический полиформизм?

02.04.2016, 14:34. Показов 32781. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть тема полиморфизм. В ней присутствуют два вида динамический и статический. Статический творит что-то на компляции, а второй во время выполнения Не пойму, данные слова, можно ли это поподробнее?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.04.2016, 14:34
Ответы с готовыми решениями:

Что такое статический и динамический массивы?
Разработать алгоритм и по нему составить два варианта программы для обработки одномерного массива. Первый вариант программы – работа со...

Что лучше динамический или статический?
Что лучше динамический ip-адрес или статический?

Статический и динамический Ip
1. При подключении телефона к ПК (использую как модем) как определяется ip и шлюз подключения. Какие службы работают? 2. Ip телефона у...

4
 Аватар для Leonin
6 / 6 / 3
Регистрация: 31.08.2015
Сообщений: 56
02.04.2016, 14:48
Aristarhh,
Полиморфизм позволяет коду быть более гибким. Переопределение, наследование виртуальных методов, перегрузка методов... Так вот когда эти инструменты используются во время компиляции (когда мы уже переводим наш код высокого уровня в машинный код) - это статический полиморфизм, а когда в рантайме (в процессе выполнения программы) - динамический. В основном перегрузка методов и операторов - это статический полиморфизм, а переопределение виртуальных методов более узкоспециализированными классами - это динамический полиморфизм.

Могу ошибаться, но я понял так.
2
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 25
02.04.2016, 21:35  [ТС]
Leonin, спасибо, но вот динамический полиморфизм, а каким образом я могу применить какие либо действия во время выполнения, можно пример?)
0
 Аватар для Leonin
6 / 6 / 3
Регистрация: 31.08.2015
Сообщений: 56
03.04.2016, 02:24
Лучший ответ Сообщение было отмечено Aristarhh как решение

Решение

Aristarhh, Вот хорошее определение, где происходит динамический полиморфизм:
Если при наличии многоуровневой иерархии виртуальный метод не переопределяется в производном классе, то выполняется ближайший его вариант, обнаруживаемый вверх по иерархии на стадии выполнения приложения.
Допустим, есть класс asbstract class Animal с виртуальным методом virtual Move (). Разные животное по разному передвигаются: птицы летают, рыбы плывут, мы с вами ходим. Но в Move () базового абстрактного класса уже определена как бы общая реализация метода. К примеру, мы точно можем сказать, что положение в пространстве будет меняться. Мы решили создать свое новое животное. Но мы пока не знаем, как именно будет происходить его передвижение в этом случае мы не еще не реализовали более специфичный метод передвижения. Но в любом случае наше животное class MyAnimal наследуется от Animal и имеет метод Move.
Теперь, допустим, мы придумали, как он будет двигаться и переопределили метод. Два метода имеют ту же сигнатуру и одно название. Какой из методов вызывать: родителя или потомка? Ответ на этот вопрос дается во время компиляции. Заключение: первое предложение в ответе.
1
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
03.04.2016, 03:01
Цитата Сообщение от Aristarhh Посмотреть сообщение
Статический творит что-то на компляции, а второй во время выполнения
Статический - адрес метода который вызывается определяется при компиляции. (пример - обработка шаблонами разных типов)
Динамический - адрес метода который вызывается определяется в рантайме (из VMT объекта чей метод вызывается). Пример - есть действительно рыбки птички и т.п. Запихнули элементы всех в один массив Animal Animals[]. Вызываем для каждого элемента массива Animals виртуальный метод Move, и каждый элемент плывет, летит скачет по своему.
Есть еще параметрический полиморфизм. Пример - у каждого Animal есть поле в котором помечено кто он и куча методов которые реализуют поведение. в методе Move класса Animal примерно вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
Animal::Move(){
        switch (AnimalType){
                  case atFish: FishMove();
                                   break; 
                  case atBird: BirdMove() 
                                   break;
                  case atHuman: HumanMove(); 
                                     break; 
        }  
}
Динамический полиморфизм в плане поведения объектов абсолютно соответствует параметрическому, но при этом предоставляет более удобный синтаксис, гораздо более пригодный для увеличения типа полиморфных объектов и более высокое быстродействие, за счет использования указателя на метод для определения какой метод вызывать для конкретного экземпляра вместо ветвления.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2016, 03:01
Помогаю со студенческими работами здесь

Динамический и статический массив
Подскажите, в чем разница. Имеется статический массив, который просто задается: long mas = { 0 }; Т.е. просто вставляем массив...

Статический и динамический массив
Помогите пожалуйста. Мучаюсь уже месяцю Даны статический и динамический массивы одинаковой размерности 4 на 3. Написать программу,...

Динамический массив в статический
Есть метод, который принимает в качестве параметра статический массив типа double. В этот метод надо передать массив List типа double....

Статический и динамический массивы
1.​ Дан массив А из N+1 вещественных чисел. Элементы массива А – это коэффициенты многочлена N-ой степени. Вычислить значение многочлена и...

Статический и динамический стек
Необходимо разработать программу, реализующую алгоритм стека (10 элементов). Решение необходимо представить в двух вариантах: статическом...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru