Чисто виртуальная функция без тела не должна быть вызвана никогда. Это теоретически. Но при очень большом желании ее таки можно вызвать.
В случае чисто виртуальной функции с телом, все несколько проще, я об этом писала.
Ну а если тела нет, то можно сделать так.
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 из конструктора или деструктора в качестве параметра.
Только не спрашивайте "А зачем это нужно?" :-)
1 коммент.:
"веревка достаточной длины, чтобы выстрелить себе в ногу" ?
;)
Отправить комментарий