Здравствуйте, Caracrist, Вы писали:
...
C>B * b = new B();
C>A * a = new A();
C>A * ab = &b;
a->>f1(); // f1 не делает virtual call
ab->>f1();// f1 не делает virtual call
C>
И? Во-первых компилятор это не скушает все по той же причине.
Во-вторых я не понял что вы хотели сказать. "f1 не делает virtual call" — да, разумеется, и "a" и "ab" это указатели на "A", и там нет virtual call. Но к чему вы это?
В-третьих я могу переписать пример и уже в базовом классе сделать f1 виртуальной, но это ничего не изменит. Хотя вызов уже пойдет через таблицу.