Форум программистов, компьютерный форум, киберфорум
Наши страницы

Практическое применение виртуальных функций - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значение выражения с учетом приоритета выполнения http://www.cyberforum.ru/cpp-beginners/thread569883.html
Дано выражение без скобок, в котором встречаются операции +,-* и /. Вычислить значение выражения с учетом приоритета выполнения операций.Например, для выражения 11+100 * 5 должны получить 511....
C++ Шифрование ГОСТА28147-89 string k="hhhh", k1="kjhg"; string str=k xor k1; // это получается какая-то 4 байтовая абракадабра вроде ♥☺♣ подскажите пожалуста как из полученой абракадабры получить 8 4-ех битные... http://www.cyberforum.ru/cpp-beginners/thread569862.html
C++ Ошибка преобразования типа
Задача состояла в следующем: реализация алгоритма проверки n на простоту, используя малую теорему Ферма. В силу недостаточного опыта и позднего времени накумекал следующий код с пояснениями: В...
Строковый класс C++
Ребят, помогите решить пожалуйста... Написать программу для работы с строковым классом. В классе предусмотреть все основные операции со строками. Поля и методы класса: Переменная strs -...
C++ Передача массивов в функцию http://www.cyberforum.ru/cpp-beginners/thread569824.html
Помогите с программой пожалуйста!! Конец года, горю.. 1)Вычислить с использованием функции max элементы каждой строки матрицы A(10,20). Результаты формировать в одномерных массивах C(10) и D(10)....
C++ Имя массива как указатель Помогите с программой пожалуйста!! Конец года, горю.. Используя имя массива как указатель, и применяя адресную арифметику выполнить задание. 13. Дан одномерный массив, состоящий из N целочисленных... подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1640 / 1012 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
10.05.2012, 20:28
Практически виртуальные методы нужны для реализации динамического полиморфизма. Его общий принцип - это единообразная работа с разными объектами, имеющими разное поведение. Часто в пример приводят векторный графический редактор. Рисунок там состоит из набора различных фигур: Line, Rectangle, Ellipse, Curve и т.п. Каждая разновидность фигуры обладает собственным методом отрисовки. Но если мы сделаем все эти фигуры наследниками общего класса Shape, в котором есть виртуальный метод Draw, то мы сможем представить рисунок в виде набора указателей на Shape, причём каждый указатель в действительности указывает на фигуру того или иного типа, в зависимости от содержимого рисунка. Когда нам надо вывести рисунок на экран, мы проходимся по всем указателям и вызываем у них метод Draw, при этом для каждого объекта будет вызван его собственный метод, который правильно интерпретирует данные в объекте и правильно его рисует. Выбор именно того метода, что нужно, происходит благодаря тому, что метод Draw виртуальный.

Этот принцип (единообразная работа с объектами разных типов) наиболее чисто воплощается в концепции интерфейса. Мы определяем некий класс-предок, он же интерфейс, в котором содержатся общие операции и естественным образом ограничиваемся только перечисленными в этом предке операциями. Каждая операция задаётся в виде виртуальной функции, причём чистой: сама функция только объявлена в интерфейсе, но не реализована. Больше в интерфейсе нет ничего - ни данных, ни вспомогательных операций. От интерфейса наследуют классы, которые обязаны реализовать все операции интерфейса. Такие классы называются реализацией интерфейса. При создании объектов-реализаций указатели на них приводятся к базовому классу, после чего работа с ними происходит единообразно в рамках, заданных интерфейсом. Возможны случаи, когда конкретный тип объектов вообще скрывается от того, кто эти объекты использует (например, при загрузке из файла). Тогда всё, что известно программисту - только сам интерфейс, и работа может вестись только через перечисленные там операции.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru