Форум программистов, компьютерный форум CyberForum.ru

О виртуальном наследовании - C++

Восстановить пароль Регистрация
 
Вениамин
Сообщений: n/a
04.11.2008, 13:46     О виртуальном наследовании #1
Хотелось бы с Вашей помощью разобраться в деталях виртуального наследования.
Вопрос такой: что на физическом уровне означает выражение

class B : public virtual A {};

Вот с виртуальными функциями все вроде ясно: к объекту добавляется еще 4 байта, которые содержат указатель на виртуальную таблицу класса, которая, в свою очередь, содержит адреса виртуальных функций.

А здесь как?

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2008, 13:46     О виртуальном наследовании
Посмотрите здесь:

Вопросец о виртуальном конструкторе копировщике. C++
C++ Как перегрузить оператор в виртуальном классе
C++ Ошибка при наследовании
Ошибка в наследовании C++
не до понимание в наследовании C++
C++ Ошибка при наследовании?
Конструкторы при наследовании C++
Сравнение при наследовании C++
C++ Ошибка в наследовании
Почему при виртуальном наследовании компилятор не знает о иерархии? C++
C++ Присвоение при наследовании
Ошибка при наследовании C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ManiaK
Сообщений: n/a
04.11.2008, 17:58     О виртуальном наследовании #2
Ну ты загнул!)
Andir
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
ManiaK
Сообщений: n/a
05.11.2008, 15:44     О виртуальном наследовании #4
Или в 'Язык програмирования C++ Специальное издание' Бьярна Страуструпа
Вениамин
Сообщений: n/a
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 {}; ???
Yandex
Объявления
06.11.2008, 11:47     О виртуальном наследовании
Ответ Создать тему
Опции темы

Текущее время: 10:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru