Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Получение базового класса наследника из родителя (число прочтений - 3096 )
shmalevoz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 55
Зарегистрирован: 23. Апреля 2009
Получение базового класса наследника из родителя
17. Сентября 2009 :: 16:29
Печать  
Есть ли возможность получить базовый класс объекта из его родителя? К примеру в иерархии base->chield0->chield1 конструкция
Код
Выбрать все
вирт().ПолучитьБазовыйКласс("chield0") 

, вызванная из родителя base объекта chield1 возвращает Число==0
Пример прилагается
  

tmp_001.zip ( 13 KB | Загрузки )
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Получение базового класса наследника из родителя
Ответ #1 - 17. Сентября 2009 :: 20:00
Печать  
Нет такой возможности и быть не может.
Класс не должен зависеть (даже знать не должен) о том, кто там от него унаследовался.
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Получение базового класса наследника из родителя
Ответ #2 - 18. Сентября 2009 :: 03:07
Печать  
Федор прав.
Но если уж очень хочется
Печаль , сделай виртуальную функцию.
в базе ее реализация пуста.
в наследнике 1 она как раз и вызывает указанный тобой код.
Эту функцию в базе вызывай через вирт().

Но серьезно подумай - если тебе понадобилась подобная взаимосвязь, наверняка у тебя неверная схема использования/реализации класс.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
shmalevoz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 55
Зарегистрирован: 23. Апреля 2009
Re: Получение базового класса наследника из родителя
Ответ #3 - 18. Сентября 2009 :: 05:23
Печать  
Суть вопроса такова : есть цепочка условий, некоторые из которых общие для всей цепочки наследования. Структура наследования в общем случае неизвестна, но вся цепочка реализует общий интерфейс, и имеет общего предка. Соответственно желательно, чтобы исходный родитель прошелся по всей цепочке и получил результат выполнения условий всей цепочки. Проверка показала, что код, внешний по отношению к объекту, может получить все объекты иерархии. Так в чем получается разница между объектами, полученными через Сам(Контекст) и СоздатьОбъект("ххх") ? Тест прилагается.
  

tmp_002.zip ( 14 KB | Загрузки )
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Получение базового класса наследника из родителя
Ответ #4 - 01. Октября 2009 :: 02:42
Печать  
Метод ПолучитьБазовыйКласс ищет базовые классы всегда от того класса, в котором он вызывается, а не от того, для которого он вызывается.
  
Наверх
 
IP записан
 
shmalevoz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 55
Зарегистрирован: 23. Апреля 2009
Re: Получение базового класса наследника из родителя
Ответ #5 - 01. Октября 2009 :: 21:30
Печать  
В тесте показано, что при, например, иерархии x->y->z вызов из x this().ПолучитьБазовыйКласс("y") неработоспособен. Но в то же время, вызов их x такой конструкции как
Код
Выбрать все
ПостороннийОбъект
  Функция _Базовый(Ссылка, Идентификатор)
    Возврат Ссылка.ПолучитьБазовыйКласс(Идентификатор);
  КонецФункции
/ПостороннийОбъект
 


ПостороннийОбъект._Базовый(this(), "y") работает корректно.
Так в чем разница, между Сам(Контекст), полученным в текущем контексте, и переданным в посторонний контекст ?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Получение базового класса наследника из родителя
Ответ #6 - 03. Октября 2009 :: 07:06
Печать  
Поищи по форуму "ПолучитьБазовыйКласс"
Если вопросы останутся - возвращайся.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать