Автор: Фитч (19.03.2007 в 11:33)
> Так что же значит слово virtual?
Суть такая: если в базовом классе есть функции, объявленные с virtual (необязательно конструктор/деструктор), а в подклассе они переопределены, то если вызвать этот метод базового класса, то на этапе исполнения будет решаться, метод какого класса (базового или кого-то из наследников) будет вызван (полиморфизм, позднее связывание - знакомы?) Для ясности пример:
struct Base
{
virtual void showMessage()
{
fprintf(stdout,"Message from Base!");
}
};
struct SubClass : public Base
{
virtual void showMessage()
{
fprintf(stdout,"Message from Subclass");
}
};
void alert(Base* o)
{
o->showMessage();
}
/* ... */
Base* b = new Base;
SubClass* s = new SubClass;
alert(b);
alert(s);
}
|
Будет выведено:
Message from Base!
Message from subclass
В случае с вашими классами это будет нужно для корректной работы деструктора в завизимости от подкласса, если вы все объекты будете обрабатывать как Base