Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Вениамин
1

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

04.11.2008, 13:46. Показов 1128. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хотелось бы с Вашей помощью разобраться в деталях виртуального наследования.
Вопрос такой: что на физическом уровне означает выражение

class B : public virtual A {};

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

А здесь как?

Спасибо.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2008, 13:46
Ответы с готовыми решениями:

Почему при виртуальном наследовании компилятор не знает о иерархии?
Рассмотрим пример: class Base { virtual void foo()=0; }; class Derv :public Base { ...

Редирект на виртуальном хосте
Здравствуйте. Начал изучать веб-технологии и столкнулся с такой проблемой, нужно сделать...

ИИ в виртуальном упрощённом мире
Привет всем. В последние дни много обдумывал ИИ. Пришёл к следующим мыслям: 1) Искусственный...

кракозябы в виртуальном приводе
подскажите в чем проблема? винда 10 была на русском языке, сейчас стоит итальянский. проблема в...

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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2008, 11:47
Помогаю со студенческими работами здесь

Вопросец о виртуальном конструкторе копировщике.
Здравствуйте, все. Вопрос плана такого: Читаю, значит, книжку. Дочитал до виртуальных методов. И...

Отрисовка грида в виртуальном режиме
Доброго времени суток уважаемые. Пишу проект на VB.NET. Мне необходимо отобразить выборку склада...

Как обновить PHP на виртуальном хостинге?
На моём виртуальный хостинге (VPS на XEN) стоит PHP 5.3. Возможно через PHP-команду exec...

Клиент-сервер. Чат на виртуальном сервере
Здравствуйте. Подскажите пожалуйста как реализовать чат клиент-сервер, если установить сервер на...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru