виртуальная функция в c



Виртуальная функция

Автор Измайлов Кирилл задал вопрос в разделе Другие языки и технологии

для чего нужны виртуальные функции в C+/+? и получил лучший ответ

Ответ от Modern Иванов[гуру]
Современные программы могут насчитывать десятки тысяч классов, которые связаны между собой наследованием. Например, в каждой есть ф-ция void Show() ,которая выводит на экран информацию о классе при каком то событии. Как ты выберешь нужную? Напишешь 30000 раз if-else?Вот для такой ситуации и пригодится механизм виртуальных ф-ций. В базовом классе определяется, что ф-ция Show() виртуальная. Для каждого наследуемого класса пишется её реализация. Теперь в программе можно вызвать ф-цию через указатель или по ссылке на базовый класс. Не нужны указатели на каждый производный класс. В момент выполнения, программа сама определяет, какую версию ф-ции вызвать.
void FuncAllShow(Base &ob)
{
ob.Show();
}
Теперь в процессе выполнения программы ссылку на какой бы мы класс не передали, вызовется Show() этого класса. Если для класса не переоределена ф-ция, то вызовется реализация для базового класса. (Если ф-ция не чисто виртуальная).

Ответ от A//x[гуру]
Наверное для экспериментов.. (ИМХО))

Ответ от Алексей[активный]
На википедии вполне приличная статья на эту тему
Общая суть - в том, если у тебя класс Б наследует у класс А, и есть указатель типа А*, который указывает на объект класса Б, то при обращении к функции, если она виртуальна - то ты выполнится функция класса Б, а иначе - функция класса А.

Ответ от Марина Цветочная[гуру]
Для полиморфизма. Один интерфейс -- множество методов.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: для чего нужны виртуальные функции в C+/+?

подскажите чем виртуальная функция отличается от обычной функции
Виртуальные и динамические методы не связаны с другими методами с тем
же именем в классах —
подробнее...

Виртуальное наследование С++
Виртуальную функцию надо определять, если нет ее реализации по умолчанию (в базовом классе она
подробнее...

Расскажите, для чего вобще нужны Виртуальные методы?
Читай:

Виртуальный метод (виртуальная функция) — в объектно-ориентированном
подробнее...

как понять слово демо версия
Демонстрационная версия, демоверсия [1], демо-версия [2] (или просто демо) , пробная версия —
подробнее...
спросили в C Sharp
В чем отличие С++ от С, С#, и С#.Net и какое отношение к ним имеет Sharp
С это подмножество С++. То есть изучив С++ вы должны без проблем понимать С.

Грубо
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:

что такое программный интерфейс?
Программный интерфейс, аналогичную любому другому интерфейсу, выполняет роль связующего звена между
подробнее...

C++ массив array в классе
У массива это не список инициализации!

std::vector<int> v({1,2,3,4,5}); //
подробнее...
спросили в Danamon Open
C++ VS 2010 CFile читать файл!
CFile F1;
F1. Open( L " text. dat " , CFile : : modeCreate | CFile : : modeReadWrite ) ;
подробнее...

Виртуальные функции в c#,зачем они?
override означает перекрывание одноименного метода/свойства класса-потомка. по сути замена этим
подробнее...

Проблема с виртуальным компом VMware после переноса его с одной машины на другую ...далее
смотря что копировал. если это обычный виртуальный комп (не виртуальная сеть из компов) юзай
подробнее...
спросили в Функции Функциями
Как пользоваться таблицей интегральной функции Лапласа?
Таблицами значений интегральной функции Лапласа нынче никто не пользуется. Вместо этого тупо
подробнее...

Как с помощью CLONE CD 4.2.0.2 можно создать виртуальный диск?
ты бы ещё в винде эту функцию искал, клоне сд как и двд просто копируют диски или в образ иди на
подробнее...

Функция mail php
у многих хостеров использование этой функции отключено, уточните у
подробнее...

Как работает виртуальный деструктор? что это? С++
деструктор осфобождает память, занимаемую тем или иным объектом и вызывается по окончанию функции,
подробнее...
Виртуальный метод на Википедии
Посмотрите статью на википедии про Виртуальный метод
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*