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

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

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

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

05.07.2014, 18:26. Просмотров 218. Ответов 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++ Неоднозначность при наследовании
Деструктор при наследовании C++
C++ Почему при создании класса у абстракных классов по иерархии пусто в _vptr ?
Почему, при попытке "взять" адрес переменной,компилятор ее не положит на регистр? C++
C++ Использование шаблонов при наследовании, ошибка при компиляции
Ошибка при наследовании C++

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

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

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