Скачать MetaTrader 5

Проблемма: замкнутый круг в описаниях классов

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как установить MetaTrader на Linux
Sergey Kravchuk
3330
Sergey Kravchuk 2009.12.01 12:05 

в MQL5 нет указателей. в связи с этим возникла у меня трабла - помогите решить.

допустим есть у меня класс Parent. в нем есть массив Childs[] который тоже класс. в каждом элементе Child-а есть свой массив ну например свойств каких то - Properties[] который тоже класс.

для того чтобы описать всю эту связку - мне сначала нужно описать класс Properties (потому что он будет использоваться в Childs и должен быть описан до того). Точно также Childs должен быть описан до Parent.

А теперь вопрос: как мне в Properties прописать ссылку на объект Parent? Ну вот нужно мне знать в каждом свойстве от какого папы оно произошло. Для того, чтобы дать ссылку или описание Parent в Properties, Parent должен быть описан до того как появится Properties! Но Parent нельзя описать до того, поскольку в не есть ссылка на Childs - замкнутый круг :( 

В обычном языке программирования я бы завел себе какой то абстрактный указатель в Properties, запомнил бы указатель на создаваемый Parent, и дальше по ходу создания Properties записывал бы в него указатель на родителя. но... возвращаемся к началу - в MQL5 нет указателей.

Короче как мне прописать вот это чтобы оно работало:

class Properties
{
        Parent* PropParent; // вот это написать нельзя - Parent еще не описан :(((((((((
        .....
        PropParent = MyParent; // а вот такое хочется хранить именно здесь
}

class Childs
{
        int Cnt;
        Properties MyProp[];
        .....
        ArrayResize (MyProp, Cnt);
}

class Parent
{
        int Cnt;
        // ссылка на самого себя чтобы потом прописывать ее Properties
        Parent* MyParent = this;
        
        Childs MyChild[];
        .....
        ArrayResize (MyChild, Cnt);
}      

кто знает как разорвать это замкнутый круг?

Комбинатор
15929
Комбинатор 2009.12.01 12:22  

ForexTools :

кто знает как разорвать это замкнутый круг?

Вынести необходимую в properties часть в базовый класс (скажем IParent) от которого парент будет наследоваться.

IParent можно определить до пропертей. Кстати в C++ решается простым предварительным объявлением, которого увы в MQL5 нет.

Да, и метод SetParent вкупе с проверкой указателя(описателя) -- конструкторов с параметрами тоже нет.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий