Только что с собеседования.
И попался такой вопрос (см ниже):
#include "iostream"
class A { public: virtual void f() =0; };
class B { public: virtual void f() { std::cout<< "My string"<<std::endl; } };
void main()
{
// обращаю внимание, что троиточия между кодом нет, весь код "как есть".
A *a = 0; // здесь именно нули
B *b = 0; // здесь именно нули
//a->f();
b->f();
}
Если я не ошибаюсь, то была именно такая запись. Был вопрос, как поведёт себя программа. Правильный ответ был озвучен так: если снять комментарий с "a->f();", то программа ругнется Unhandle (так и было мною сказано), а вот b->f(); должен выдать строку "My string"
И сослались на устройство виртуальной таблицы и стандарт (после поста сразу лезу в стандарт, что бы узнать).
Попробовал на MSVC 2008, b->f() также выдало Unhadled.
Это был гон, или ошибка компилятора Действительно ли это так?
p.s. Если тут окажется человек с которым я сегодня беседовал прошу подключиться к топику.