Разговоры на завалинке о ООП - страница 8

 
Maxim Dmitrievsky:

наверное потому, что я почти не понимаю этот код :)

сорри, программист-любитель.. с ООП на базовом уровне только знаком

Дык, не Вы один не понимаете, не Вы один... Такой стиль - впихнуть невпихуемое в Макрос - имеет свои преимущества и недостатки. Насколько заметил, коллега fxsaber демонстрирует только преимущества (гибкость, кроссплатформенность и т.п.). А то что в Отладчике такой код не проверить, это как? Ну и читаемость такого стиля весьма сомнительна. Но, как говорится, хозяин - барин...

 
Комбинатор:
в С++ класс и структура одно и то же, просто некоторые умолчания разные.

угу, как взять указатель на структуру?

 
Vasiliy Sokolov:

Так учиться надо на правильных примерах. А в СБ их нет. Взять тот же CObject - контроль типов он не обеспечивает, работу на уровне интерфейсов с объектами он не предоставляет, зато содержит бессмысленные методы вроде Save() и Load(), которые никогда и не переопределяются на практике. Указатели m_prev и m_next используются в одном единственном классе CList, зато присутствют как балласт для всех классов потомков. Самым полезным является метод Comparer(). Действительно он переопределяется чаще всего. Но по-хорошему Comparer() - это интерфейс, его правильней было бы определить не в CObject, а в виде отдельного класса. 

Про контроль поясни плз, не понял. С какими объектами? Это вообще должен быть класс пустышка, без полей и методов. Его единственная цель - обеспечить общего предка для других классов. То, что разрабы навставляли туда мусора, это большая ошибка.

И никаких Compare там быть не должно. Это должен быть класс-пустышка.

 
Alexey Volchanskiy:

Про контроль поясни плз, не понял. С какими объектами? Это вообще должен быть класс пустышка, без полей и методов. Его единственная цель - обеспечить общего предка для других классов. То, что разрабы навставляли туда мусора, это большая ошибка.

И никаких Compare там быть не должно. Это должен быть класс-пустышка.

Это-ж не SmallTalk, вся практика (да и теория тож) показали что выводить древо объектов от Адама - злющее зло. Причём ST это позволительно, он в собственном соку (своей вирт.машине) варится.

судя поподогреву, к 8-му марта ожидаем try-catch-throw ?? :-) Праздник конечно будет женский, но грех будет не выпить

 
Maxim Kuznetsov:

Это-ж не SmallTalk, вся практика (да и теория тож) показали что выводить древо объектов от Адама - злющее зло. Причём ST это позволительно, он в собственном соку (своей вирт.машине) варится.

судя поподогреву, к 8-му марта ожидаем try-catch-throw ?? :-) Праздник конечно будет женский, но грех будет не выпить


Не, праздника не будет, Ренат сказал - никаких исключений. См. ветку https://www.mql5.com/ru/forum/168361 , тут кто-то ее наверх поднял. Мне самому было интересно, планируются эксепшены или как? Ответ был увы отрицательный.

Зато мля в компиляторе появилась важная галка - проверять делители ))))) пипец. Ждем к 8 марта галку "проверять выход за границы массива..." И потом еще 25 страниц с подобными галками. Ведь эксепшены-то готовить не умеем.

ЗЫ: Посмотрел базовый класс Object в C#, тоже минимум. Картинка из msdn


Почему в MQL5 нет исключений?
Почему в MQL5 нет исключений?
  • 2017.01.29
  • www.mql5.com
Не нужны, надо все условия руками проверять, по старинке оно надежнее Нужны, почему нет - не знаю А что это такое? Хочу посмотреть...
 
Dennis Kirichenko:

Дык, не Вы один не понимаете, не Вы один... Такой стиль - впихнуть невпихуемое в Макрос - имеет свои преимущества и недостатки. Насколько заметил, коллега fxsaber демонстрирует только преимущества (гибкость, кроссплатформенность и т.п.). А то что в Отладчике такой код не проверить, это как? Ну и читаемость такого стиля весьма сомнительна. Но, как говорится, хозяин - барин...

Зачем приписывать конкретному примеру то, чего в нем нет?

Maxim Dmitrievsky:

по каким лекалам можно научиться точно так же программировать? :) очень уж симпатично вглядит

Самоучка, поэтому нигде не подсмотрено. У меня Туполевский подход: "Хорошо летают только красивые самолеты!"

 
Maxim Kuznetsov:

Это-ж не SmallTalk, вся практика (да и теория тож) показали что выводить древо объектов от Адама - злющее зло. Причём ST это позволительно, он в собственном соку (своей вирт.машине) варится.

судя поподогреву, к 8-му марта ожидаем try-catch-throw ?? :-) Праздник конечно будет женский, но грех будет не выпить


Смысл пустого базового класса в том, чтобы мы могли написать такое. Сразу говорю, пример не несет полезной нагрузки, на ходу придумал. Смысл в том, что любой производный класс мы можем привести к CObject*

CObject* objarr[12];

void OnStart()
{
    objarr[0] = new CAccountInfo;
    // еще что-то подобное, кладем в массив указатели на объекты абсолютно разных классов, но с одним предков
    objarr[11] = new CDealInfo;
    // обращаемся и работаем
    CAccountInfo * ai = (CAccountInfo*)objarr[0];
    //
    
    for(int n = 0; n < 12; n++)
        if(CheckPointer(objarr[n]) == POINTER_DYNAMIC)
            delete objarr[n];
       
}

*

 
Alexey Volchanskiy:

угу, как взять указатель на структуру?

честно говоря не понял вопроса, но в любом случае так же как для класса
 
Комбинатор:
честно говоря не понял вопроса, но в любом случае так же как для класса

Сильно извиняюсь, Вы в контексте какого языка делаете такой вывод? :-)



 
Комбинатор:
честно говоря не понял вопроса, но в любом случае так же как для класса

class C {};
struct S {};

void OnStart()
{
    C *_c = new C; // так можно
    S *_s = new S; // указатели на структуру не допускаются 
}

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