Приведение типов указателей, как перегрузить?
Для этого есть специальная операция, dynamic_cast.myClass = dynamic_cast<MyClass*>(interface);
Если interface не MyClass, то вернёт NULL.
В случае, если через dynamic_cast присваиваем не указатели, а ссылки, выбросит аварию std::bad_cast.
UPD. Такие преобразования «вниз» — это компромисс между ООП и реальностью, которая вынуждает упрощать интерфейсы. Например, в C++ Builderint __fastcall SomeObject::ButtonClick(TObject* Sender)
{
  TButton* button = dynamic_cast<TButton*>(Sender);
  ...
}
Вообще, если вам по какой-то причине необходимо преобразование вниз по иерархии классов, то это признак плохой архитектуры, т.к. неверно передаются зависимости или неверно выделены интерфейсы или вы как-то неправильно работаете с библиотекой. Хотя, конечно бывают и исключения, но их немного.