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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
#1

Почему при виртуальном наследовании компилятор не знает о иерархии? - C++

05.07.2014, 18:26. Просмотров 222. Ответов 1
Метки нет (Все метки)

Рассмотрим пример:

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Base
{ 
   virtual void foo()=0;
};
 
class Derv :public Base
{
   foo(){}
};
 //Тут компилятор знает о всей иерархии можно осуществлять преобразования:
Base* bp = new Derv;
Derv* dp = static_cast<Derv*>(bp); //Все ок
Но как только режим наследования становится public virtual, компилятор уже "не знает" ничего о том что Base явл. базовым классом для Derv, и необходим dynamic_cast (RTTI mechanism) . Сообсно вопрос: Почему компилятор вдруг "перестает знать" о иерархии? (Раньше ведь знал -> информация где-то хранилась и не было необходимости лезть в vtable за информацией о типе)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2014, 18:26     Почему при виртуальном наследовании компилятор не знает о иерархии?
Посмотрите здесь:

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

Почему при создании класса у абстракных классов по иерархии пусто в _vptr ? - C++
Вот что я имею ввиду:

Компилятор не знает dirent.h - C++
Как это исправить?

Почему, при попытке "взять" адрес переменной,компилятор ее не положит на регистр? - C++
почему, при попытке &quot;взять&quot; адрес переменной,компилятор ее не положит на регистр

Присвоение при наследовании - C++
Всем доброго дня ! Подскажите пожалуйста как сделать так , что-бы при выполнении операции a = c; вызывались операторы = обеих ...

Конструкторы при наследовании - C++
Добрый вечер. Пишу программу с наследованием классов. Класс-родитель - nasled, производный от него - steck. Когда пытаюсь вызвать...

Деструктор при наследовании - C++
Имеется 3 класса (базовый -&gt; производный -&gt; производный2) в классе базовый имеется переменная char* var; в производном тоже есть 1...

Ошибка при наследовании - C++
Подскажите пожалуйста почему наследование класса readwrite не работает? //Программа считывает данные из файла и строит графики ...

Ошибки при наследовании класса - C++
Доброго времени суток!Возникли ошибки при компиляции кода Задание было такое:Создать абстрактный базовый класс Body (тело) с виртуальными...

Какая-то неопределенность при наследовании - C++
Всем привет! Прошу помощи. Суть: //A.h class A { A(); virtual ~A();


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
05.07.2014, 19:24     Почему при виртуальном наследовании компилятор не знает о иерархии? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
На этапе компиляции неизвестно смещение между виртуальным базовым классом и наследниками. При такой простой иерархии это неочевидно - но становится вполне понятно если рассмотреть ромбовидную.
Ссылка по теме: http://habrahabr.ru/company/pvs-studio/blog/186682/
Ответ Создать тему
Опции темы

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