Здравствуйте, Bell, Вы писали:
E>>Как вызвать для ЭТОГО объекта виртуальную функцию ОПРЕДЕЛЕННОГО класса, причем не меняя при этом никаких данных объекта, не меняя его тип итп?
B>Используя явную квалификацию. Если, имея указатель типа A*, и зная, что этот указатель указывает на объект типа C, то для вызова метода B::do_it нужно проделать 2 операции:
B>1. преобразовать указатель типа A* в указатель типа B* или C*
B>2. вызвать требуемый метод, используя явную квалификацию
B>B>A* a = new C();
B>B* b = static_casz<B*>(a);
b->>B::do_it();
B>C* c = static_cast<C*>(a);
c->>B::do_it();
c->>C::do_it();
B>
Теперь все понятно, большое спасибо.
Насколько я понял, невозможно изменить указатель так, чтобы неквалифицированный вызов a->do_it() привел бы к вызову виртуальной функции какого-либо базового класса в иерархии.