Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Множественное наследование

1.9K
22 января 2009 года
GreenRiver
451 / / 20.07.2008
Доброго дня!

Появилась проблема с множественном наследовании (C++, среда RAD 2009). Собственно сначала я подумал, что это гон компилятора, а потом понял, что скорее особенность языка. Дело вот в чем:

Предположим есть класс C, который наследуется от A и B. Класс С используется в основном через базовые классы (а-ля интерфейсы)...
Код:
class C: public A, public B
{
}

C *c = new C;

// Вот такая запись корректна:
// Можно получить доступ к полям объекта a
A *a = c;

// А вот такая запись нет:
// в b будет мусор
B *b = c;


В связи с этим вопрос, как можно стандартно привести указатель класса C, к указателю класса B?
И правильно ли например вот такое решение:
 
Код:
B *b = c + sizeof(A);
11
22 января 2009 года
oxotnik333
2.9K / / 03.08.2007
dynamic_cast<Type>(Pointer)
3
22 января 2009 года
Green
4.8K / / 20.01.2000
Цитата: GreenRiver

 
Код:
// А вот такая запись нет:
// в 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 здесь не нужен.

1.9K
22 января 2009 года
GreenRiver
451 / / 20.07.2008
Всем спасибо! Все действительно так как вы говорите, нашел у себя ошибку!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог