Доступ из вложенного класса к полям внешнего или соседнего класса. - страница 2

 

 Я не так уж и отменно знаю шарп. На нем сделал только один проект. Довольно сложный. Тоже робот. Теперь делаю его на MQL5.

С-4, при всем уважении, Ваш пример не подошел. Мне нужно именно то что я написал - иерархически вложенный класс с доступом к верхнему(первому) уровню в иерархии. Без наследования. Пусть это называется инкапсуляция, я не против ))

Если вложенный класс узко специализирован, т.е. хранит и обрабатывает инфу о позиции, какой смысл делать его наследником основного класса? Достаточно только доступа к его полям. Например, кратность лота, цены и т.д. Иначе получается чёрти-чО, если таких классов пять, например.

stringo, зачем делать отдельный метод для передачи параметра, который нужен только при создании класса? Я думал что для этого и существуют параметры конструктора. Где тут ошибки проектирования, наоборот строгая иерархия. 

На шарпе я делал именно так. Через конструктор, только ссылкой а не указателем. И проблем не возникало. А тут не получилось. Ни с наскока, ни через 5 часов поисков. Непонятки в итоге оказались только в синтаксисе.

Не говорю что язык плохой, но имхо MQL5/[++] менее дружественный чем шарп. Интересно какое преимущество в скорости.

Спасибо злому колдуну. Он заклинания хорошо выучил. Старый наверное 

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
stringo:

1. Почему бы Вам не применить инкапсуляцию? То есть, объект одного класса является членом другого класса безо всякого наследования.

Это называется агрегация )

2. Почему Вам необходимо передавать пойнтер именно в конструкторе? Отдельный метод сделать не судьба?

Это частичное следование RAII

 
TheXpert:

Это называется агрегация )

Я всё равно не против ))

Это частичное следование RAII
Действительно, чем не аргумент.

 

Вона аж ветка про преимущества языков проснулась ))  

 
pronych:

Вона аж ветка про преимущества языков проснулась ))  

Это относится ко всем языкам.
 
pronych:

 На шарпе я делал именно так. Через конструктор, только ссылкой а не указателем. 

Ссылка в C# - это и есть типобезопасный указатель на объект. Все объекты в нем создаются оператором new, т.е. динамически. Т.е. объявление int i; Это System.Int32 i = new System.Int32(); И все разговоры о том, что C# проще MQL5 далеко не так, C# намного, намного сложней MQL5, но конечно при этом и гораздо мощней.

pronych:

С-4, при всем уважении, Ваш пример не подошел. Мне нужно именно то что я написал - иерархически вложенный класс с доступом к верхнему(первому) уровню в иерархии. Без наследования. Пусть это называется инкапсуляция, я не против ))

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

 
C-4:

Ссылка в C# - это и есть типобезопасный указатель на объект. Все объекты в нем создаются оператором new, т.е. динамически. Т.е. объявление int i; Это System.Int32 i = new System.Int32(); И все разговоры о том, что C# проще MQL5 далеко не так, C# намного, намного сложней MQL5, но конечно при этом и гораздо мощней.

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

Блин, да шош такое! Я же объяснил что мне нужно! Вполне подробно. Откуда такая уверенность что мне нужно не то что мне нужно?! Ну ладно, Вам наверно лучше знать... Странно только, что мало данных...

Я знаю что такое наследование. Вроде есть и такие способы решить такую задачу. Т.е. объявить вложенный класс наследником основного. Не знаю, у меня не получилось. Мне достаточно ссылки на него.

Хорошо объясню подробнее.

Конкретно для  С-4. Примерно такая конструкция:

class CSymbol        //верхний уровень
{
//+------------------------------------------------------------------+
   CInfo Info;
   class CInfo //вложенный класс
   {
   public  int digit = 2;
   ...
   };
//+------------------------------------------------------------------+
   CPosition Pos;
   class CPosition //вложенный класс
   {
   public  double Lot ;
   public  double Price ;
   public   void Update(double lot, double price)
      {
       Lot=lot;
       Price = NormalizeDouble(price, Info.digits);// как мне получить Info.digits по вашему с наследованием? 
      }
   
   };
//+------------------------------------------------------------------+
   COrders Orders;
   class COrders //вложенный класс
   {
   //...тут тоже апдейт
   };
};
CSymbol Symb[];
 

pronych:

Т.е. объявить вложенный класс наследником основного.

ы:) дети шарпа

че надо так и не ясно.

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

 
Да ответ уже получил от злого колдуна. При чем конкретный, и без лишних слов. Просто мода тут такая - дураком вопрошающего выставить. Без разбора.
 
pronych:

Блин, да шош такое! Я же объяснил что мне нужно! Вполне подробно. Откуда такая уверенность что мне нужно не то что мне нужно?! Ну ладно, Вам наверно лучше знать... Странно только, что мало данных...

Я знаю что такое наследование. Вроде есть и такие способы решить такую задачу. Т.е. объявить вложенный класс наследником основного. Не знаю, у меня не получилось. Мне достаточно ссылки на него.

Хорошо объясню подробнее.

Конкретно для  С-4. Примерно такая конструкция:

Так в чем проблема? Используйте агрегацию. Или компилятор не дает писать говнокод? 

По сабжу: задача CSymbol в чем заключается? Смешать в кучу коней и людей, позиции, сделки и инструмент? Так вроде у него это неплохо получилось. Но при чем здесь ООП?  

sergeev:

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

  Во-во, давай лучше конкретную задачу на словах. Созерцать такой говнокод я больше сегодня не выдержу.

 

задача в CSymbol иметь всю инфу и все методы по одному конкретному инструменту.

Спасибо. Созерцайте  свой говнокод. От вас помощи не требуется.

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