Вениамин
|
|
1 | |
О виртуальном наследовании04.11.2008, 13:46. Показов 1128. Ответов 4
Метки нет (Все метки)
Хотелось бы с Вашей помощью разобраться в деталях виртуального наследования.
Вопрос такой: что на физическом уровне означает выражение class B : public virtual A {}; Вот с виртуальными функциями все вроде ясно: к объекту добавляется еще 4 байта, которые содержат указатель на виртуальную таблицу класса, которая, в свою очередь, содержит адреса виртуальных функций. А здесь как? Спасибо. |
04.11.2008, 13:46 | |
Ответы с готовыми решениями:
4
Почему при виртуальном наследовании компилятор не знает о иерархии? Редирект на виртуальном хосте ИИ в виртуальном упрощённом мире кракозябы в виртуальном приводе |
ManiaK
|
|
04.11.2008, 17:58 | 2 |
Ну ты загнул!)
|
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 145
|
|
05.11.2008, 04:26 | 3 |
Привет!
Не знаю насчёт чего товарищ сказал что ты загнул, но вполне правомерный вопрос. Итак виртуальные классы используются в наследовании, при этом если указан модификатор virtual, то используется только один объект для всех наследников, одна копия класса (его переменных и функций-членов). В отличие от обычного наследования когда в каждый наследник делается своя копия базового класса. ссылочка по теме в MSDN на VS.NET ms-help://MS.VSCC/MS.MSDNVS/vclang/html/_pluslang_virtual_base_classes.htm и аналог в инете: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_Virtual_Base_Classes.asp
0
|
ManiaK
|
|
05.11.2008, 15:44 | 4 |
Или в 'Язык програмирования C++ Специальное издание' Бьярна Страуструпа
|
Вениамин
|
|
06.11.2008, 11:47 | 5 |
Ну да, это я знаю. Если у нас есть следующее:
class A{}; class B : public virtual A {}; class C : public virtual A {}; class D : public B, public C {}; то при создании объекта класса D, будет создан один экземляр класса A, в отличие от не виртуального наследования. Но вот вопрос: а если к примеру класс C наследует А не виртуально, т.е. class C : public A {}; Что тогда будет при создании объекта класса D??? Поэтому мне интересно узнать как компилятор все это представляет? Вот если мы пишем: class B : public virtual A{}; в объект класса B добавляется какая-то информация размером в 4 байта??? какая? Если в А есть виртуальная функция, то эта информация уже 8 байт??? Вот про те же виртуальные функции: если в классе есть хоть одна виртуальная функция, к объекту класса добавляется 4 байта - указатель на таблицу виртуальных функций - и от сюда уже понятно как раелизуется полиморфизм. А что значит: class B : public virtual A {}; ??? |
06.11.2008, 11:47 | |
06.11.2008, 11:47 | |
Помогаю со студенческими работами здесь
5
Вопросец о виртуальном конструкторе копировщике. Отрисовка грида в виртуальном режиме Как обновить PHP на виртуальном хостинге? Клиент-сервер. Чат на виртуальном сервере Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |