#include <iostream>
using namespace std;
class B
{
B();
public:
virtual void print()=0;
};
void B::print()
{
cout << "B::print";
}
int main()
{
B *bp;
bp->B::print(); /* Type-A works fine */
bp->print(); /* Type-B segmentation fault */
return 0;
}
В приведенном выше коде я пытаюсь использовать чистую виртуальную функцию через 'bp'. Теперь в основной функции есть два типа вызова (Тип-A, Тип-B). Мой вопрос в том, почему A работает, но B нет. Более того, почему компилятор позволяет вызывать нестационарную функцию без создания объекта.Странное поведение чистой виртуальной функции
Re: "* почему компилятор позволяет вызывать нестационарную функцию без создания объекта. *" Поскольку компилятор предполагает, что вы знаете, что делаете. У компилятора нет простого способа проверить, что 'bp' указывает на что-то действительное в общем случае. –
В зависимости от вашего уровня предупреждения вы должны увидеть что-то вроде 'warning C4700: неинициализированная локальная переменная 'bp' used'. – Derek