Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Множественное наследование в MFC


Автор: deniska 21.9.2021, 13:54
Тут есть еще кто живой?
Работаю над графической библиотекой оконных компонентов, столкнулся вот с чем:
Код

class CBaseData
{
// тут какие-то поля и методы
}

class CMyControl : public CBaseData, public CWnd
{
};


в родительском окне, в DoDataExchange в DDX_Control() вижу вменяемый адрес в памяти контрола типа CMyControl и его же в this в CMyControl::PreSubclassWindow,
но как только дело доходит до обработчиков сообщений внутри CMyControl, например OnPaint, в this я получаю адрес на 48 байт больше, эти 48 как раз соответствуют sizeof(CBaseData)...
если изменить порядок наследования с class CMyControl : public CBaseData, public CWnd        на         class CMyControl : public CWnd, public CBaseData , то с адресами становится все нормально...

WTF собственно?
спасибо


Автор: _zorn_ 22.9.2021, 16:53
Цитата(deniska @  21.9.2021,  20:54 Найти цитируемый пост)
WTF собственно?

Смею предположить - "зависит от компилятора".
Не спец в С++, но не думаю что в других языках просто так отказались от множественного наследования.
Предлагаю его не использовать вобщем  smile 

Автор: korian 3.10.2023, 20:37
А что смущает? Так оно и должно работать.
Если изменить порядок, то адрес CBaseData будет смещен относительно CMyControl на sizeof(CWnd)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)