Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Zealotec
0 / 0 / 0
Регистрация: 05.03.2011
Сообщений: 26
#1

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

10.05.2012, 02:34. Просмотров 1231. Ответов 3
Метки нет (Все метки)

Собственно препод задал вопрос, рассказал ему все про механическую сторону вопроса, мол что такое, како й принцип, а на вопрос в теме ответить так и не смог, вот а теперь сам сижу и думаю...скажем так я не нашел отличие главное между обычными и виртуальными методами...он сказал, что это связано с таблицей виртуальных функций, в общем кто осведомлен в этом вопросе, прошу помощи
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 02:34     Практическое применение виртуальных функций
Посмотрите здесь:

Практическое применение c++ - C++
Решил изучить с++, но столкнулся со следующей проблемой: как программы на этом языке применяются на практике? При изучении с# находил...

Практическое применение классов без создания объектов этого класса - C++
Приветствую всех! Читай книгу Р. Лафоре "ООП в C++" увидел вопрос: "Истинно ли следующее утверждение: иногда полезно создать класс,...

Каково практическое применение ключевого слова "protected" ? - C++
подскажите, пожалуйста, практическое применение ключевого слова "protected:". Зачем его использовать, если "добраться" до privet членов в...

Вызов виртуальных функций - C++
Доброго времени суток, форумчане! Стоит такая задача: Есть класс, который содержит три чисто виртуальные функции, назовём его IClass. ...

Таблица виртуальных функций - C++
Доброго дня! Не могу найти, подскажите, пожалуйста, таблица виртуальных функций же только одна для класса? И каждый его объект имеет...

перегрузка виртуальных функций - C++
please HELP! перегружаю виртуальную функцию в абстрактном классе. class ONE { virtual std::string FUN(const std::string&...

Механизм виртуальных функций - C++
Всем привет! Имею базовый абстрактный класс: class Interface { public: //функция детектирования устройства true - если команда...

таблица виртуальных функций - C++
объясните плиз кто разбирается.. есть абстрактный класс с двумя виртуальными функциями, от него наследуются два класса реализующие эти...

Использование виртуальных функций - C++
Программа берет данные из двух файлов, в которых есть дата и количество проданных билетов, и высчитывает среднее количество проданных...

Использование виртуальных функций - C++
Дан класс "треугольник", который определяется длиной одной из сторон и значениями прилегающих двух углов. Создать соответствующие...

Странное наследование виртуальных функций - C++
Что-то я туплю - почему нижеприведенный код компилируется? В предке определена pure virtual функция возвращающая rvalue, а в потомке -...

Замена виртуальных функций шаблонами - C++
Такая задача - нужно заменить виртуальные функции шаблонами. Можно сделать так: struct Derived1; struct Derived2; template...


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

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

Этот принцип (единообразная работа с объектами разных типов) наиболее чисто воплощается в концепции интерфейса. Мы определяем некий класс-предок, он же интерфейс, в котором содержатся общие операции и естественным образом ограничиваемся только перечисленными в этом предке операциями. Каждая операция задаётся в виде виртуальной функции, причём чистой: сама функция только объявлена в интерфейсе, но не реализована. Больше в интерфейсе нет ничего - ни данных, ни вспомогательных операций. От интерфейса наследуют классы, которые обязаны реализовать все операции интерфейса. Такие классы называются реализацией интерфейса. При создании объектов-реализаций указатели на них приводятся к базовому классу, после чего работа с ними происходит единообразно в рамках, заданных интерфейсом. Возможны случаи, когда конкретный тип объектов вообще скрывается от того, кто эти объекты использует (например, при загрузке из файла). Тогда всё, что известно программисту - только сам интерфейс, и работа может вестись только через перечисленные там операции.
Zealotec
0 / 0 / 0
Регистрация: 05.03.2011
Сообщений: 26
11.05.2012, 07:55  [ТС]     Практическое применение виртуальных функций #3
спасибо, я теперь не только объяснить могу, но и сам что-то понял
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
11.05.2012, 08:07     Практическое применение виртуальных функций #4
Цитата Сообщение от Zealotec Посмотреть сообщение
спасибо, я теперь не только объяснить могу, но и сам что-то понял
Еще важные слова: статический тип и динамический тип.
Статический тип - это при объявлении, а динамический тип - это во время работы.
Указатель, например, имеет статический тип базового класса, а динамический тип - наследника.
Виртуальные методы вызываются по динамическому типу, а обычные - по статическому.
Yandex
Объявления
11.05.2012, 08:07     Практическое применение виртуальных функций
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru