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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Вызов методов базового класса
13. Февраля 2019 :: 08:21
Печать  
Есть простой базовый класс и производный класс.

Скажите пожалуйста как нужно использовать методы базового класса в производном.

1) Можно ли в производном классе сделать переменную мБазовыйКласс и  в конструкторе производного класса вставить вот такую строку:

Код (C++)
Выбрать все
мБазовыйКласс = Этот().ПолучитьБазовыйКласс("БазовыйКласс");
 



И в модуле производного класса там где нужно вызывать методы базового класса вот таким образом:

Код (C++)
Выбрать все
мБазовыйКласс.Метод();
 



Можно так делать?

2) Работают ли методы вирт() и я()?
Помню, что давно это обсуждалось.
А вот заработало или нет - не знаю.
При проверке синтаксиса выдаются ошибки на эти методы.

  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызов методов базового класса
Ответ #1 - 13. Февраля 2019 :: 11:40
Печать  
Код (C++)
Выбрать все
Сам = Сам(Контекст);
Сам.ПолучитьБазовыйКласс().Инит(); 


или
Код (C++)
Выбрать все
Сам = Сам(Контекст);
Сам.ПолучитьБазовыйКласс(ИмяТипа).Инит();
 


ссылку на объект базового класса хранить не надо, утечки памяти будут
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Вызов методов базового класса
Ответ #2 - 13. Февраля 2019 :: 14:17
Печать  
ADirks писал(а) 13. Февраля 2019 :: 11:40:
ссылку на объект базового класса хранить не надо, утечки памяти будут

Понятно, спасибо.

Уточните, в чем разница между вашими двумя вариантами кода?
Первый вариант какой базовый класс вернет?
Непосредственный предшественник?


И по второму вопросу что-нибудь известно?
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызов методов базового класса
Ответ #3 - 14. Февраля 2019 :: 10:40
Печать  
Сам.ПолучитьБазовыйКласс() - это непосредственный родитель
Сам.ПолучитьБазовыйКласс(ИмяТипа) - это явно указанный родитель, актуально при вложенности наследования более 2, или при множественном наследовании

например, есть класс
класс ТТабличноеПоле  : ТабличноеПоле, ТПерехватчик

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

про я() и вирт() могу сказать только что у меня они работают, версия 3.2.4.0
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Вызов методов базового класса
Ответ #4 - 14. Февраля 2019 :: 12:45
Печать  
ADirks писал(а) 14. Февраля 2019 :: 10:40:
про я() и вирт() могу сказать только что у меня они работают, версия 3.2.4.0


А при проверке синтаксиса в Конфигураторе, ошибки выдаются на эти методы?

  
Наверх
ICQ  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Вызов методов базового класса
Ответ #5 - 14. Февраля 2019 :: 12:59
Печать  
es3000 писал(а) 14. Февраля 2019 :: 12:45:
ADirks писал(а) 14. Февраля 2019 :: 10:40:
про я() и вирт() могу сказать только что у меня они работают, версия 3.2.4.0


А при проверке синтаксиса в Конфигураторе, ошибки выдаются на эти методы?


Плагин Visual 1C++ для платформы OpenConf
http://openconf.1cpp.ru/beta/
http://www.script-coding.com/Visual1cpp.html
Установить как Панель иначе без открытия конфигурации все равно ругается.

или в глобальник засунуть...
Функция   вирт() Экспорт КонецФункции
Функция   я() Экспорт КонецФункции
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вызов методов базового класса
Ответ #6 - 15. Февраля 2019 :: 11:36
Печать  
Цитата:
ссылку на объект базового класса хранить не надо, утечки памяти будут

я не уверен, но имхо - это безопасно
не безопасно - это ссылки на наследника в базовом
  

1&&2&&3
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Вызов методов базового класса
Ответ #7 - 15. Февраля 2019 :: 15:43
Печать  
trad писал(а) 15. Февраля 2019 :: 11:36:
Цитата:
ссылку на объект базового класса хранить не надо, утечки памяти будут

я не уверен, но имхо - это безопасно
не безопасно - это ссылки на наследника в базовом


А как это можно проверить?
Чтобы уж точно было понятно.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вызов методов базового класса
Ответ #8 - 18. Февраля 2019 :: 11:09
Печать  
в деструкторы обоих классов добавить Сообщить("я <класс такой-то> - убит")
  

1&&2&&3
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Вызов методов базового класса
Ответ #9 - 18. Февраля 2019 :: 14:49
Печать  
trad писал(а) 18. Февраля 2019 :: 11:09:
в деструкторы обоих классов добавить Сообщить("я <класс такой-то> - убит")


Оба деструктора срабатывают.
Значит, хранить ссылку на базовый класс в классе-наследнике можно!
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вызов методов базового класса
Ответ #10 - 19. Февраля 2019 :: 06:28
Печать  
Цитата:
Оба деструктора срабатывают.

для закрепления выводов, сделай ссылки наоборот
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать