Автор Олюшка задал вопрос в разделе Другие языки и технологии
подскажите чем виртуальная функция отличается от обычной функции и получил лучший ответ
Ответ от Нуриев Нусрат[гуру]
Виртуальные и динамические методы не связаны с другими методами с тем
же именем в классах — наследниках. Если в классах — наследниках эти методы
перегружены, то при обращении к такому методу во время выполнения будет вы-
зываться тот из методов с одинаковыми именами, который соответствует классу
объекта, указанному при вызове. Например, если имеется базовый класс графиче
ских объектов TShape и ряд наследующих ему классов различных геометрических
фигур, и если в каждом из этих классов определен свой виртуальный метод Draw,
рисующий эту фигуру, то можно написать в программе:
var ShapeSrray: array[1..10] of TShape;
for i:=l to 10 do ShapeArray.Draw;
В этом коде в массив ShapeArray могут помещаться объекты разных классов,
наследующих TShape. В цикле for обращение к объектам производится как к объ-
ектам базового для них типа TShape. В этом случае для каждого объекта будет вы-
зываться виртуальный метод Draw именно этого объекта. Такой подход, облегчаю-
щий работу с множеством родственных объектов, называется полиморфизмом.
При объявлении в классе виртуальных и динамических методов после точки
с запятой, завершающей объявление метода, добавляются ключевые слова virtual
или dynamic. Например:
type
TShape = class
procedure Draw; virtual ;
end;
....
А вот ещё , если непонятно:
Источник: Архангельский - программирование в Delphi
наверное тем что виртуальная принадлежит классу а простая и без класса может быть (хотя я точно не помню)
Если под "обычной функцией" имеется в виду функция-член класса, то различие в следующем:
- виртуальная функция может быть переопределена в классе-наследнике, при вызове функции объектом этого класса-наследника будет вызвана именно эта переопределенная функция (если она не переопределена, то вызывается функция базового класса)
- функция, не объявленная как виртуальная, не может быть переопределена в классе-наследнике. Даже если ее там переопределить, при вызове все равно будет вызываться функция базового класса.
Виртуальное наследование С++
Виртуальную функцию надо определять, если нет ее реализации по умолчанию (в базовом классе она
подробнее...
Расскажите, для чего вобще нужны Виртуальные методы?
Читай:
Виртуальный метод (виртуальная функция) — в объектно-ориентированном
подробнее...
как понять слово демо версия
Демонстрационная версия, демоверсия [1], демо-версия [2] (или просто демо) , пробная версия —
подробнее...
В чем отличие С++ от С, С#, и С#.Net и какое отношение к ним имеет Sharp
С это подмножество С++. То есть изучив С++ вы должны без проблем понимать С.
Грубо
подробнее...
что такое программный интерфейс?
Программный интерфейс, аналогичную любому другому интерфейсу, выполняет роль связующего звена между
подробнее...
C++ массив array в классе
У массива это не список инициализации!
std::vector<int> v({1,2,3,4,5}); //
подробнее...
для чего нужны виртуальные функции в C+/+?
Современные программы могут насчитывать десятки тысяч классов, которые связаны между собой
подробнее...
C++ VS 2010 CFile читать файл!
CFile F1;
F1. Open( L " text. dat " , CFile : : modeCreate | CFile : : modeReadWrite ) ;
подробнее...
Виртуальные функции в c#,зачем они?
override означает перекрывание одноименного метода/свойства класса-потомка. по сути замена этим
подробнее...
Расскажите, пожалуйста, преимущество основных (популярных) языков программирования.
Вам что, все языки сравнивать между собой? Напишите 2-3
подробнее...
Проблема с виртуальным компом VMware после переноса его с одной машины на другую ...далее
смотря что копировал. если это обычный виртуальный комп (не виртуальная сеть из компов) юзай
подробнее...
Как пользоваться таблицей интегральной функции Лапласа?
Таблицами значений интегральной функции Лапласа нынче никто не пользуется. Вместо этого тупо
подробнее...
Как с помощью CLONE CD 4.2.0.2 можно создать виртуальный диск?
ты бы ещё в винде эту функцию искал, клоне сд как и двд просто копируют диски или в образ иди на
подробнее...
Как работает виртуальный деструктор? что это? С++
деструктор осфобождает память, занимаемую тем или иным объектом и вызывается по окончанию функции,
подробнее...