Чисто виртуальная функция без тела не должна быть вызвана никогда. Это теоретически. Но при очень большом желании ее таки можно вызвать.
В случае чисто виртуальной функции с телом, все несколько проще, я об этом писала.
Ну а если тела нет, то можно сделать так.class A
дальше осталось где-нибудь вызвать
{
public:
A()
{func(this);};
virtual void pureVirtual()=0;
};
class B : public A
{
public:
virtual void pureVirtual(){};
};
void func(A* pA)
{
pA->pureVirtual();
}
new B;
Поведение компилятора в данном случае не определено (undefined). Но большинство компиляторов скажут в рантайме "pure virtual function call".
Вообще не рекомендуется передавать this из конструктора или деструктора в качестве параметра.
Только не спрашивайте "А зачем это нужно?" :-)
воскресенье, мая 22, 2005
Как вызвать чисто виртуальную функцию без тела
Подписаться на:
Комментарии к сообщению (Atom)
1 коммент.:
"веревка достаточной длины, чтобы выстрелить себе в ногу" ?
;)
Отправить комментарий