С++

Форум предназначен для новичков. В нем предполагается рассматривать вопросы, которые встают на первых этапах освоения Linux
nibbler
Заглянувший
Сообщения: 2
Зарегистрирован: 09 июл 2009, 12:00

С++

Сообщение 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 ); //опять нет ошибки


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

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

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Re: С++

Сообщение michael »

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

Ответить