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

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

Восстановить пароль Регистрация
 
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
05.07.2014, 18:26     Почему при виртуальном наследовании компилятор не знает о иерархии? #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++ Ошибка при наследовании
О виртуальном наследовании C++
При компилировании компилятор вылетает,нет ли ошибок, или почему он так? C++
Конструкторы при наследовании C++
C++ Неоднозначность при наследовании
Деструктор при наследовании C++
C++ Почему при создании класса у абстракных классов по иерархии пусто в _vptr ?
C++ Присвоение при наследовании

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

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

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