class C: public A, public B
{
}
C *c = new C;
// Вот такая запись корректна:
// Можно получить доступ к полям объекта a
A *a = c;
// А вот такая запись нет:
// в b будет мусор
B *b = c;
Множественное наследование
Появилась проблема с множественном наследовании (C++, среда RAD 2009). Собственно сначала я подумал, что это гон компилятора, а потом понял, что скорее особенность языка. Дело вот в чем:
Предположим есть класс C, который наследуется от A и B. Класс С используется в основном через базовые классы (а-ля интерфейсы)...
Код:
В связи с этим вопрос, как можно стандартно привести указатель класса C, к указателю класса B?
И правильно ли например вот такое решение:
Код:
B *b = c + sizeof(A);
dynamic_cast<Type>(Pointer)
Цитата: GreenRiver
Код:
// А вот такая запись нет:
// в b будет мусор
B *b = c;
// в b будет мусор
B *b = c;
Не будет мусора!
Цитата: GreenRiver
В связи с этим вопрос, как можно стандартно привести указатель класса C, к указателю класса B?
B *b = c; // это правильно!
для большей убедительности можешь написать:
B *b = static_cast<B*>(c);
Цитата: GreenRiver
И правильно ли например вот такое решение:
Код:
B *b = c + sizeof(A);
Нет, в корне не верно!
Цитата: oxotnik333
dynamic_cast<Type>(Pointer)
dynamic_cast здесь не нужен.
Всем спасибо! Все действительно так как вы говорите, нашел у себя ошибку!