![]() |
|
|
![]()
|
|
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: нет Всего: 26 |
Как в C++ реализуется множественное наследование от интерфейсов COM?
Допустим у нас есть класс, который наследует от двух интерфейсов Как будет выглядеть таблица виртуальных методов (VMT), и как будет происходить доступ к данным? Если у нас простое наследование, то вызывающая сторона, используя указатель pFoo на объект с интерфейсом IFoo, по известному ей смещению в VMT вызывает метод, передавая ему pFoo как this, и этот метод получает данные своего объекта через this по известным ему смещениям относительно this. А если у нас множественное наследование, и при вызове вызывающая сторона знает только об одном интерфейсе, она по прежнему будет передавать как this указатель на тот интерфейс о котором она знает. Значит при этом будет несколько VMT, но что при этом происходит с данными? Будет ли там структура
Получается что в методах одного интерфейса к полю объекта будут обращаться по одному смещению, а в методах другого интерфейса к тому же полю будут обращаться по одному смещению? Или все организуется как-то еще? |
|||
|
||||
| xvr |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Так же, как и множественное наследование от всего остального
При взятии указателя на любого родителя this потомка корректируется, что бы корректно указывать на начало родителя внутри потомка. При вызове виртуального метода по такому указателю this перемещается (внутри метода) обратно, на начало потомка. |
||||||||||
|
|||||||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |