Подкласс внутри класса

 

   Прочитал статью " Рецепты MQL - пишем свой стакан цен" https://www.mql5.com/ru/articles/1793 . В приложенных файлах почему-то нет полного кода, который описан в статье. Фраза из статьи: "Все расчеты также непосредственно перенесем в класс стакана цен CMarketBook, для чего напишем специальный расчетный подкласс CBookCalculation, находящийся внутри CMarketBook. Ниже приведем его исходный код: " .

Код приведен, а вот как вставить этот подкласс в класс чтобы члены подкласса были видны в классе CMarketBook не сказано. До автора как-то не достучатьтся , может кто подскажет как это реализовать?


 


Рецепты MQL5 - Пишем свой стакан цен
Рецепты MQL5 - Пишем свой стакан цен
  • 2015.07.03
  • //www.mql5.com/ru/users/C-4">
  • www.mql5.com
Эта статья научит читателей программно работать со стаканом цен, а также подробно опишет принципы работы класса CMarketBook, который органично расширит стандартную библиотеку классов MQL5 и предоставит удобные методы для работы со стаканом.
 
Alexander:

   Прочитал статью " Рецепты MQL - пишем свой стакан цен" https://www.mql5.com/ru/articles/1793 . В приложенных файлах почему-то нет полного кода, который описан в статье. Фраза из статьи: "Все расчеты также непосредственно перенесем в класс стакана цен CMarketBook, для чего напишем специальный расчетный подкласс CBookCalculation, находящийся внутри CMarketBook. Ниже приведем его исходный код: " .

Код приведен, а вот как вставить этот подкласс в класс чтобы члены подкласса были видны в классе CMarketBook не сказано. До автора как-то не достучатьтся , может кто подскажет как это реализовать?


 


Не надо автора в пятницу тревожить, в конце любой статьи всегда есть ссылка на исходники )
 
Alexander:

   Прочитал статью " Рецепты MQL - пишем свой стакан цен" https://www.mql5.com/ru/articles/1793 . В приложенных файлах почему-то нет полного кода, который описан в статье. Фраза из статьи: "Все расчеты также непосредственно перенесем в класс стакана цен CMarketBook, для чего напишем специальный расчетный подкласс CBookCalculation, находящийся внутри CMarketBook. Ниже приведем его исходный код: " .

Код приведен, а вот как вставить этот подкласс в класс чтобы члены подкласса были видны в классе CMarketBook не сказано. До автора как-то не достучатьтся , может кто подскажет как это реализовать?


 


Внутри класса можно определить экземпляр другого класса.

Пример:

class Class1
{
public:
          Class1();
          ~Class1();
double   Value;
};
.....
class Class2
{
private:
   Class1 CLS;//экземпляр класса Class1 
public:
          Class2();
          ~Class2();
   double SetValue(double value){CLS.Value = value};
};
....
 
Vitalii Ananev:

Внутри класса можно определить экземпляр другого класса.

Пример:


Или другой класс

class A
{
public:
    class B
    {
    public:
        int b;
    };
    int a;
    void SetB() 
    {
        B cb;
        cb.b = 123;
    };
};

void OnStart()
{
    A ca;
    ca.SetB();
}

 ***

 
  Спасибо!
 
Alexey Volchanskiy:

Или другой класс

 ***

Какой в этом смысл? Что-нибудь меняется по сравнению с описанием класса снаружи? Ничего не меняется.

 
Dmitry Fedoseev:

Какой в этом смысл? Что-нибудь меняется по сравнению с описанием класса снаружи? Ничего не меняется.

Какой в этом смысл? Что-нибудь меняется по сравнению с описанием класса внутри? Ничего не меняется.

Но часто встречается. Надо знать.

 
Alexey Volchanskiy:

Какой в этом смысл? Что-нибудь меняется по сравнению с описанием класса внутри? Ничего не меняется.

Но часто встречается. Надо знать.

И так и так будет работать. Тут дело привычки. Мне например удобнее отлаживать когда класс в отдельном файле описан и реализован, особенно когда много строчек кода упрощает отладку.
 
Vitalii Ananev:
И так и так будет работать. Тут дело привычки. Мне например удобнее отлаживать когда класс в отдельном файле описан и реализован, особенно когда много строчек кода упрощает отладку.

Я тоже всегда в отдельном файле делаю.

И не совсем в тему, но похоже. В С++ собираются ввести (или уже ввели??) вложенные (nested) функции. Вот это было бы реально полезное дополнение в MQL. А пока можно эмулировать вот так. В GCC они есть, как нестандартное расширение.

void outer()
{
        static int v1 = 5;
        int v2 = 5;

        struct thru
        {
                static void inner()
                {
                       v1++;
                       v2++; // ошибка, нет доступа     
                }
        };

        thru::inner();
}
Причина обращения: