ООП - страница 8

 

Как вернуть ссылку в параметрах функции?

Такой код вызывает проблемы:

CMy* obj; // global
bool func(CMy* obj)
{
...
  obj = new CMy();
...
}

Invalid pointer access при попытке работы потом с obj.

Попробовал добавить &.

bool func(CMy*& obj)

Так работает. Возврат ссылки в параметрах функции в документации не нашел.

По аналогии в C++ нашел такую тему: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter

Но у вас ** не работает. *& вместо неё?

5.00.630 x64

returning a pointer as a function parameter
returning a pointer as a function parameter
  • stackoverflow.com
Im trying to return the data pointer from the function parameter: bool dosomething(char *data){ int datasize = 100; data = (char *)malloc(datasize); // here data address = 10968998
 
flops:

 Возврат ссылки в параметрах функции в документации не нашел.

Вы про это: Справочник MQL5 / Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this ?
 
flops:

Как вернуть ссылку в параметрах функции?

Такой код вызывает проблемы:

Invalid pointer access при попытке работы потом с obj.

Попробовал добавить &.

Так работает. Возврат ссылки в параметрах функции в документации не нашел.

По аналогии в C++ нашел такую тему: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter

Но у вас ** не работает. *& вместо неё?

5.00.630 x64

ИМХО (давно было)

 Через аргументы указатель передать нельзя, можно создать ссылку. К ссылке нельзя привязать новый экземпляр класса. Остается такой вариант:

CMy* func()
{
...
  CMy* obj;
  obj = new CMy();
  return(obj);
...
}
 
Vigor:

Я - сторонник ООП, так как для себя понял удобство программирования снизу вверх. От интерфейсов взаимодействия объектов к реализации классов.

А разве интерфейс это не внешнее по отношению к классу?
 
220Volt:

ИМХО (давно было)

 Через аргументы указатель передать нельзя, можно создать ссылку. К ссылке нельзя привязать новый экземпляр класса. Остается такой вариант:

 

Я неправильно обозначил вопрос.

Передача указателя по ссылке. Меня интересует, можно ли использовать вариант с *&, не прикроют ли в следующих версиях? В C++ такая конструкция, вроде бы, законна.

 
Yedelkin:
Вы про это: Справочник MQL5 / Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this ?

Хотелось бы, чтобы там была нужная информация...


В статье

https://www.mql5.com/ru/docs/basis/function/ParameterPass

тоже можно добавить информации по работе с объектами.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Andrei01:
А разве интерфейс это не внешнее по отношению к классу?

А что это меняет для объектов? Интерфейс в данной интерпретации это тип данных, потому что его описание достаточно четко определяет свойства объектов. И, по сути, он задает внешнее поведение объектов.

В приведенных мной материалах противники ООП упоминали, что нельзя создать структуру классов сразу до конца, не реализовав алгоритм, поэтому в ООП среде так часто практикуется рефакторинг и поэтому классы тормозят разработку с их вечным переделываением. И это действительно так. Реализуя что-то новое и не понимая во что это может вылится, классы придется переделать и не раз.

Создание грамотной архитектуры классов является камнем преткновения для начинающих. По сути, смыслом ООП программирования является написание своего "языка", языка на котором удобно и быстро творить в дальнейшем. Интерфейс это суть язык который проектируется под задачи. Интерфейс, по хорошему, не нужно понимать как конструкцию "типа" класса, как контракт для класса который нужно исполнить в коде(в MQL его нет и роль интерфейса с натяжкой могут выполнять виртуальные методы).

К примеру, можно создать "язык" для создания новых экспертов, который позволит в несколько строчек собрать общую схему работы эксперта из объектов. Сигналы и условия можно использовать готовые, а можно разрабатывать от случая к случаю свои классы сигналов, по аналогии и создать свою библиотеку. Такую возможность предоставляет Мастер MQL5.

Часто, схема построения приложения уже придумана и "ООП программирование" по сути сводится к использованию существующих классов с ограниченными степенями свободы для написания своего функционала - это удобно. Поэтому так популярны фреймворки. Они избавляют от лишних проблем и головной боли при разработке архитектуры приложения.  По сути, написание что-то своего, это создание класса наследника одного из классов фреймворка, и написание реализации в нем определенных колбэк методов, которые уже встроены в общую логику приложения (OnInit, OnTick тому пример).

 
Vigor:

...

Создание грамотной архитектуры классов является камнем преткновения для начинающих. По сути, смыслом ООП программирования является написание своего "языка", языка на котором удобно и быстро творить в дальнейшем. Интерфейс это суть язык который проектируется под задачи. Интерфейс, по хорошему, не нужно понимать как конструкцию "типа" класса, как контракт для класса который нужно исполнить в коде(в MQL его нет и роль интерфейса с натяжкой могут выполнять виртуальные методы).

...

Скорее смыслом ООП является написание своей архитектуры. Как только у нас появляется четкая, ясная, интуитивно понятная архитектура, все сразу встает на свои места и не сложность проекта ни его объем уже не являются здерживающими факторами. Однако что бы добиться этой самой четкой архитектуры приходится раз за разом переписывать классы постепенно приближаясь к этому вначале смутному идеалу.
 
C-4:
Скорее смыслом ООП является написание своей архитектуры. Как только у нас появляется четкая, ясная, интуитивно понятная архитектура, все сразу встает на свои места и не сложность проекта ни его объем уже не являются здерживающими факторами. Однако что бы добиться этой самой четкой архитектуры приходится раз за разом переписывать классы постепенно приближаясь к этому вначале смутному идеалу.
+1
 

Очень здравые мысли озвучиваете господа, но как бы найти эту свою желанную архитектуру?!) Вечно что то приходится менять и переделывать и кажется этому нет предела)).

Сам ООП использую относительно недавно и классы больше как отдельные части без наследования. Вот и назрели несколько вопросов по наследованию, буду благодарен за подсказку.

1. Класс потомок может пользоваться членами и методами родителя, а родитель может так же пользоваться методами своих наследников? Или нужно только явно создавать экземпляр класса наследника, чтобы получить доступ к его методам? Тогда следующий вопрос как это делать если эти классы в разных файлах, получается они должны ссылаться друг на друга.

2. Или это в принципе не правильных подход в ООП когда родителю нужно использовать методы наследников? Сейчас у меня классы не зависимы, и методы вызываются явно через экземпляры, но все равно выстраивается иерархия, опять же вопрос в эффективности такого подхода.

Причина обращения: