Переключение на Главную Страницу Страницы: 1 [2] 3 4 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) ПолучитьТекущийОбъект() (число прочтений - 34395 )
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПолучитьТекущийОбъект()
Ответ #15 - 02. Июня 2006 :: 10:53
Печать  
kms писал(а) 02. Июня 2006 :: 08:55:
Ой.
А еще ведь лучше будет отсекать каким-то методом все другие ветки, кроме той, в которой идет выполнение.
Тогда и полиморфизм будет работать, и ЗаменитьБазовыйОбъект() и ПолучитьБазовыйКласс() тоже.

Это лучший вариант?


Насколько я понимаю, это то же самое, что сказано вот тут: http://www.1cpp.ru/forum/YaBB.pl?num=1149163670 , только другими словами.
Цитата:
ПолучитьБазовыйКласс() не обеспечивает неполиморфности в модуле самого класса.
Если бы была возможность написать что-то вроде Сам(Контекст).ПолучитьБазовыйКласс(Сам(Контекст)), с тем, чтобы получить такой же Сам(Контекст), но неполиморфный, тогда коллизию удалось бы избежать.


Разве нет? Так что я похоже за. Улыбка
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #16 - 02. Июня 2006 :: 10:57
Печать  
Нет, это не то же самое.
Все методы остаются полиморфными, но ровно настолько, насколько это допустимо.

Но, Федор. Какая, блин, разница. С удовольствием принимаю тебя в соавторы. Подмигивание
Собственно, если бы не ты, я бы обо всем не стал бы думать.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #17 - 02. Июня 2006 :: 11:06
Печать  
1. Я за явное преобразование.

2. Ответь на мои вопросы, просто замени явное преобразование на неявное.

3. Получается Сам() будет выдавать разный результат  при вызове из одного и того же метода наследника в зависимости от того, откуда был вызван этот виртуальный метод?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПолучитьТекущийОбъект()
Ответ #18 - 02. Июня 2006 :: 11:07
Печать  
kms писал(а) 02. Июня 2006 :: 08:55:
О
А еще ведь лучше будет отсекать каким-то методом все другие ветки, кроме той, в которой идет выполнение.


Я не стал выделять новый метод, а попытался расширить возможность существующего. Типа чтобы через ПолучитьБазовыйКласс() можно было передать получить не только базовый класс, но и текущий тоже. С отсеченными остальными ветками, кроме текущей.

А дальше - если нам нужен обратносовместимый полиморфизм - пользуемся Сам(Контекст). Если нам нужна только текущая ветка иерархии - пользуемся Сам(Контекст).ПолучитьТекущийКласс(). Ага?
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #19 - 02. Июня 2006 :: 11:21
Печать  
fez писал(а) 02. Июня 2006 :: 11:07:
Я не стал выделять новый метод, а попытался расширить возможность существующего. Типа чтобы через ПолучитьБазовыйКласс() можно было передать не только базовый класс, но и текущий тоже. С отсеченными остальными ветками, кроме текущей.


Эта фраза неоднозначна. Причем в обоих вараинтах есть недостатки. Поясни, что ты хотел сказать.

Цитата:
А дальше - если нам нужен обратносовместимый полиморфизм - пользуемся Сам(Контекст). Если нам нужна только текущая ветка иерархии - пользуемся Сам(Контекст).ПолучитьТекущийКласс(). Ага?


Зачем изобрететь велосипед? При ПолучитьТекущийКласс() тоже остаются проблемы.
Надо просто реализовать dynamic_cast.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #20 - 02. Июня 2006 :: 11:28
Печать  
sedmin
Нет. Это ты ответь. Что такое Сам(). Вопрос полностью серьезный и важный для понимания.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #21 - 02. Июня 2006 :: 11:30
Печать  
sedmin писал(а) 02. Июня 2006 :: 11:06:
1. Я за явное преобразование.

2. Ответь на мои вопросы, просто замени явное преобразование на неявное.

3. Получается Сам() будет выдавать разный результат  при вызове из одного и того же метода наследника в зависимости от того, откуда был вызван этот виртуальный метод?

Пока ты думаешь, отвечу.

1. Это твое право.
2. Вопросы задавай заново, как я буду отвечать на конкретные вопросы, когда условия изменились.
3. Нет, не будет.

п. 1 изложу так: это твое право, для других - необходимо обоснование
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #22 - 02. Июня 2006 :: 11:32
Печать  
Добавлю, чтоб было понятно.

Ни о каких преобразованиях типов речь не идет. Я где о преобразованиях типов писал?
Они не нужны. Абстрагируйся от идеи dynamic_cast или объясни, зачем он тебе нужен.

Открой Страуструпа, посмотри его примеры и назначение dynamic_cast.
Посмотри его реализацию в С++ и объясни, зачем он нужен в 1С?
Опять вопрос совершенно серьезный.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПолучитьТекущийОбъект()
Ответ #23 - 02. Июня 2006 :: 11:45
Печать  
sedmin писал(а) 02. Июня 2006 :: 11:21:
fez писал(а) 02. Июня 2006 :: 11:07:
Я не стал выделять новый метод, а попытался расширить возможность существующего. Типа чтобы через ПолучитьБазовыйКласс() можно было передать не только базовый класс, но и текущий тоже. С отсеченными остальными ветками, кроме текущей.


Эта фраза неоднозначна. Причем в обоих вараинтах есть недостатки. Поясни, что ты хотел сказать.

Я ошибся. Поправил одно слово, старое оставил зачеркнутым.

Цитата:
При ПолучитьТекущийКласс() тоже остаются проблемы.

Какие?

Цитата:
Надо просто реализовать dynamic_cast.

Я не знаю, что это означает.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #24 - 02. Июня 2006 :: 11:48
Печать  
fez
Пусть сначала sedmin ответит, зачем ему dynamic_cast.
Явно преобразовывать один супер в другой? Нахуа?
Тем более, что есть полноценный механизм type_info.

Вообще, без ответов на поставленные мной вопросы, дальше разговаривать тяжело, т.е. нет согласования реальностей.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #25 - 02. Июня 2006 :: 12:01
Печать  
kms писал(а) 02. Июня 2006 :: 11:28:
sedmin
Нет. Это ты ответь. Что такое Сам(). Вопрос полностью серьезный и важный для понимания.


Сам() для меня this или self. Указатель на текущий объект. И ТипЗначенияСтр(Сам()) всегда должен быть равен ТипЗначенияСтр(СоздатьОбъект()). Ну за исключением тех случаев, когда ты его (объект) намеренно во что-то преобразовал.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #26 - 02. Июня 2006 :: 12:02
Печать  
fez писал(а) 02. Июня 2006 :: 11:07:
kms писал(а) 02. Июня 2006 :: 08:55:
О
А еще ведь лучше будет отсекать каким-то методом все другие ветки, кроме той, в которой идет выполнение.


Я не стал выделять новый метод, а попытался расширить возможность существующего. Типа чтобы через ПолучитьБазовыйКласс() можно было передать получить не только базовый класс, но и текущий тоже. С отсеченными остальными ветками, кроме текущей.

А дальше - если нам нужен обратносовместимый полиморфизм - пользуемся Сам(Контекст). Если нам нужна только текущая ветка иерархии - пользуемся Сам(Контекст).ПолучитьТекущийКласс(). Ага?

Давай еще раз внесу ясность, как должно быть.

ПолучитьБазовыйКласс() - это полностью виртуальный метод. ЗаменитьБазовыйОбъект() - тоже.
Они определены в каждом классе.
Любой экспортный метод суперкласса - виртуальный и может быть переопределен в подклассах.
Набор виртуальных методов определяет интерфейс класса.

Не нужно никаких методов преобразований. Мысль, с которой я начал, устарела. Есть другая идея.

Как мы осуществляем поиск метода в подклассе сейчас? Мы начинаем с самого верхнего уровня и идем вниз.
Как мы осуществляем поиск метода в суперклассе сейчас? Также.

В этом проблема.
Так вот, единственное, что нам нужно сделать - это изменить алгоритм поиска при выполнении в контекстах суперклассов.
Мы снова начинаем с самого верхнего уровня, но принимаем во внимание только ветки, которые приводят нас к контексту текущего исполнения (контекст суперкласса), проходим его и идем дальше вниз.

То же самое, для методов ПолучитьБазовыйКласс() и ЗаменитьЭксзБазовогоКласса().
Поскольку мы не видим из одного супера объекты и методы других суперов, они продолжают работать корректно.

Понял? Оцени красоту идеи.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #27 - 02. Июня 2006 :: 12:03
Печать  
sedmin писал(а) 02. Июня 2006 :: 12:01:
kms писал(а) 02. Июня 2006 :: 11:28:
sedmin
Нет. Это ты ответь. Что такое Сам(). Вопрос полностью серьезный и важный для понимания.


Сам() для меня this или self. Указатель на текущий объект. И ТипЗначенияСтр(Сам()) всегда должен быть равен ТипЗначенияСтр(СоздатьОбъект()). Ну за исключением тех случаев, когда ты его (объект) намеренно во что-то преобразовал.

Ну, правильно. Так и будет.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #28 - 02. Июня 2006 :: 12:05
Печать  
fez писал(а) 02. Июня 2006 :: 11:45:
Цитата:
При ПолучитьТекущийКласс() тоже остаются проблемы.

Какие?


Сначала ты ответь на вопрос: Что вернет ТипЗначенияСтр(Сам().ПолучитьТекущийКласс()), если его вызвать в родителе? "Родитель" или "Потомок"?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ПолучитьТекущийОбъект()
Ответ #29 - 02. Июня 2006 :: 12:07
Печать  

sedmin

Завязывай с некорректными вопросами.
Я же сказал, никаких ПолучитьТекущийКласс() не будет.
Врубись, пожалуйста, и не будем обсуждать то, чего нет!
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 5
ОтправитьПечать