Используете ли Вы ООП по максимому или избегаете его ? - страница 10

 

Почему нельзя инициализировать переменные и массивы в классе?

Так:

class CName{
    private:

      int x=25;

      int y[]={1,2,3,4,5}; 

    public:

    //...

} 

В чем здесь глубина экзистенциально трансцендентального смысла? :)

 
Dmitry Fedoseev:

Почему нельзя инициализировать переменные и массивы в классе?

Так:

В чем здесь глубина экзистенциально трансцендентального смысла? :)

Потому что члены класса должны инициализироваться в конструкторе класса.

Не путайте объявления переменных с описанием (не объявлением!) членов класса

 
Slawa:

Потому что члены класса должны инициализироваться в конструкторе класса.

Не путайте объявления переменных с описанием (не объявлением!) членов класса

Раз уж про массивы пошла речь, будет ли добавлено объявления многомерного динамического массива? типа int array[][] = new int[i][k];

сейчас можно только одномерный объявлять и динамически изменить   с помощью ArrayResize.

Для следующего n-мерности только статически устанавливать получается.

 
sigma7i:

Раз уж про массивы пошла речь, будет ли добавлено объявления многомерного динамического массива? типа int array[][] = new int[i][k];

сейчас можно только одномерный объявлять и динамически изменить   с помощью ArrayResize.

Для следующего n-мерности только статически устанавливать получается.

Так объявите через структуру и операторы = и []

Будет Array2D array;  array.Resize(i,k); array.[i-1].[k-1]=12;

 
Nikolay Demko:

Так объявите через структуру и операторы = и []

Будет Array2D array;  array.Resize(i,k); array.[i-1].[k-1]=12;

Спасибо, не догадался.

Но все равно это костыль :)

Когда костыли в собственном коде это терпимо, но когда костыли и ограничения в языке это удручает (никаких претензий к MQL просто иногда расстраивает).

 
sigma7i:

Спасибо, не догадался.

Но все равно это костыль :)

Когда костыли в собственном коде это терпимо, но когда костыли и ограничения в языке это удручает (никаких претензий к MQL просто иногда расстраивает).

Как бы в C++ вообще нет многомерных массивов. Есть только одномерные (в памяти то массивы одномерные). На их основе без каких-либо костылей собираются n-мерные массивы. Дело лишь за воображением. 
 
В STL есть еще такая офигенная штука как valarray
 

MQL5: Добавлена поддержка абстрактных классов и чисто виртуальных функций. 

comp:

Учусь ООП на MQL. Все нововведения освоил и активно применяю. А вот с этой появившейся фичей пока не придумал, где могло бы быть, действительно, удобно. Короче, адекватный небольшой пример нужен.

Это нужно для объявления родительского класса, который сам по себе ничего не делает, так как абстрактный. Но зато он объявляет набор чисто виртуальных функций для потомков. Ближе к жизни, мы можем объявить класс Человек с чисто виртуальной функцией Перемещаться :)) Она сама по себе ничего не делает, но говорит классам -потомкам, что они должны ее реализовать, иначе сами останутся абстрактными. 

И вот один потомок Автомобилист: Человек реализует функцию Перемещаться, как поездка на авто. Другой потомок, Пешеход, как ходьбу. Третий, Ребенок, как ползанье на четвереньках. Так яснее стало?

Есть более выхолощенные классы, называются интерфейсы. Они вообще не имею полей данных, только чисто виртуальные функции.

//интерфейс
class ICustom
{
public:
  virtual void DoSomething()=0;
  virtual ~ICustom();
};
 
//абстрактный класс
class TAbstractClass
{
private:
  bool State; // имеем поле данных, уже не интерфейс
public:
  virtual void DoSomething()=0;
  bool GetState(); // имеем одну не виртуальную функцию
  virtual ~TAbstractClass();
};

 

  ***

 
Renat Fatkhullin:

Для балансировки информации, так как некоторые совсем уже не следят за корректностью фраз:

  • В MQL5 достаточно навороченный ООП, включая шаблоны. Причем с каждым билдом возможности увеличиваются.

  • Скорость кода MQL5 (особенно x64) потрясающая, не оставляющая шансов конкурентам. Все компилируется в нативный код и вся идеология нацелена на максимальную скорость пережевывания больших объемов.

  • Без ООП практически нельзя браться за написание больших проектов.

    Только теоретики могут рассказывать сказки про "все могу, смотрите на C". К сожалению, большая часть С кода в мире - это жутко воняющая куча, которую предпочитают не трогать. Фактически эти завалы процедурного С абсолютно не поддерживаемы. Только переводом их на ООП/классы ты получаешь хоть минимальную гарантию инкапсуляции/защиты данных этого кода.

  • Как раз для обработки финансовой информации MQL5 подходит лучше всего за счет полной интеграции с торговой платформой.

    У нас нет костылей или промежуточных врапперов, теряющих скорость. Данные предоставляются автоматически, их инициализация и докачка производится асинхронно. Ну и плюс сотни прямых функций...


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

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

Хочется пожелать удачи Вам в этом нелегком деле и спросить: Имплементация R в МТ4 в списке новых возможностей значится? Обещали после новой пятерки реализовать. Ничего не поменялось надеюсь?

Успехов

 
Alexey Volchanskiy:

Это нужно для объявления родительского класса, который сам по себе ничего не делает, так как абстрактный. Но зато он объявляет набор чисто виртуальных функций для потомков. Ближе к жизни, мы можем объявить класс Человек с чисто виртуальной функцией Перемещаться :)) Она сама по себе ничего не делает, но говорит классам -потомкам, что они должны ее реализовать, иначе сами останутся абстрактными.

Вы ведете речь о создании интерфейса. Но что мешает и без абстрактных классов это делать, создавая для виртуальных функций тело в виде одного return? Или это совсем не одно и то же.
Причина обращения: