Любителям извращенного наследования
От: Аноним  
Дата: 13.10.04 11:51
Оценка:
Есть классы B1, B2, B3 ,унаследованные от A и классы D1, D2, D3, унаследованные от некоего C и соотвестсвующего класса B_i.
Есть массив указателей на объекты класса С, в которые на самом деле суются указаетли на D_i. Вопрос: как из объекта этого массива получить указатель на B_i?
Re: Любителям извращенного наследования
От: jazzer Россия Skype: enerjazzer
Дата: 13.10.04 11:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть классы B1, B2, B3 ,унаследованные от A и классы D1, D2, D3, унаследованные от некоего C и соотвестсвующего класса B_i.

А>Есть массив указателей на объекты класса С, в которые на самом деле суются указаетли на D_i. Вопрос: как из объекта этого массива получить указатель на B_i?

dynamic_cast
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Любителям извращенного наследования
От: Аноним  
Дата: 13.10.04 11:56
Оценка:
Здравствуйте, jazzer, Вы писали:
J>dynamic_cast

И больше никак? А если как-то поменять семейственность. Может еще один класс куда-нибудь ввести?
Re: Любителям извращенного наследования
От: Bell Россия  
Дата: 13.10.04 12:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть классы B1, B2, B3 ,унаследованные от A и классы D1, D2, D3, унаследованные от некоего C и соотвестсвующего класса B_i.

А>Есть массив указателей на объекты класса С, в которые на самом деле суются указаетли на D_i. Вопрос: как из объекта этого массива получить указатель на B_i?

Если в С есть виртуальные методы, то так:

C* -> (dynamic_cast<D_i*>) -> D_i -> B_i
Любите книгу — источник знаний (с) М.Горький
Re[3]: Любителям извращенного наследования
От: jazzer Россия Skype: enerjazzer
Дата: 13.10.04 12:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, jazzer, Вы писали:

J>>dynamic_cast

А>И больше никак? А если как-то поменять семейственность. Может еще один класс куда-нибудь ввести?


можно и напрямую:
D_1 d1;
C* pc = &d1;
B_1* pb = (D_1*)pc;
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.