LINUX.ORG.RU

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


0

0

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

Возможно вопрос глупый, но в справочнике я внятного объяснения не нашёл... :)

anonymous

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

struct B
{
  int func() { return 1; }
};

struct C : public B
{
  int func() { return 2; }
};

C c;
B *bp = &c;

bp->func() в данном случае вернет 1.  Если бы ф-ция была
виртуальной, то было бы 2

dilmah ★★★★★
()
Ответ на: комментарий от asgard

гррр
s/подроб/подробно/
s/обсуждаетобсуждается//

asgard
()

Виртуальные функции связаны с таким базовым понятием ООП как "полиморфизм".

r_asian ★☆☆
()

man полиморфизм :)

виртуальные функции без реальных примеров довольно сложно понять. Обрати примеры на GUI примеры (Qt/KDE) - там полиморфизм используется вовсю. Напиши простой пример и всё поймёшь.

alex_custov ★★★★★
()

>но в справочнике я внятного объяснения не нашёл... :)

У тебя два варианта:

1. Выкинуть справочник

2. Начать им пользоваться уже _после_ изучения языка по нормальному источнику. На то он и "справочник".

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

Ну нет, ну не правда... Это же такие базовые вещи, что напрашивается вопрос: а что же тогда вы _вообще_ поняли? :D

Выше уже сказали - ЧИТАТЬ СТРАУСАТРУППА. Остальное - "никчемный фуфел" =)).

anonymous
()
Ответ на: комментарий от anonymous

Всем спасибо за ответы. Мда... вместо того, чтобы погуглить - протупил и в форум залез... Несколько странный механизм реализации полиморфизма.., ну да ладно :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.