Страница 1 из 1

С++

Добавлено: 24 июл 2009, 12:45
nibbler
Чем отличается reinterpret_cast <TYPE> (объект) от конструкции (TYPE) (объект)? Например:

unsigned short *m_BufferData;
...
long int * ptr1 = reinterpret_cast <long int *> ( m_BufferData ); //нет ошибки
long int * ptr2 = static_cast <long int *> ( m_BufferData ); //ошибка
long int * ptr3 = (long int *) ( m_BufferData ); //опять нет ошибки


И ещё вопрос:
Класс А агрегирует класс Б (в классе А есть член - указатель на объект класса Б).
В классе А есть член - указатель на функцию с определённым (неважно каким) прототипом.
В классе Б есть не статическая функция с таким же прототипом.
Как присвоить члену-указателю экземпляра класса А указатель на функцию экземпляра класса Б?

Или может перенести тему в раздел "программирование" ?

Re: С++

Добавлено: 25 июл 2009, 21:08
michael
Вот тут сказано:
Что делает приведение типов в стиле С: пытается использовать static_cast, если не получается, использует reinterpret_cast. Далее, если нужно, использует const_cast.
Я так понимаю член-указатель в классе A это указатель на обычную функцию - не член какого-либо класса? Тогда никак, потому что в реальности функция-член класса и обычная функция имеют разный тип, так как функции-члену неявно передаётся указатель на объект класса, для которого она вызывается. То есть присвоить можно, но ничего хорошего из этого не выйдет.