O futuro da MQL5 é MQL5+ ou mesmo MQL6 - página 11

 
Alexey Kozitsyn:

Você já descobriu tudo. Usar uma constante NULL.

Deixe-me contar-lhe um segredo, já está implementado. Você precisa clicar sobre a roda do mouse e haverá uma mira.

Você pode fazer isso há muito tempo. Do navegador você arrasta o indicador para a janela com o indicador já anexado.

IMHO, não é a coisa mais necessária.

Você tem um navegador, você tem favoritos, você tem modelos, você tem perfis. Tudo pode ser montado. Leia Ajuda para o terminal, você descobrirá muita coisa!

As enumerações são usadas para tornar o código mais legível, para remover constantes e substituí-las por entidades conhecidas pelo homem.

Por exemplo, os valores da enumeração ENUM_DAY_OF_WEEK podem ser usados para comparação com o valor dia_da_semana da estrutura MqlDateTime. Isto é, você pode escrevê-lo assim

Ou você pode escrevê-lo de forma diferente:

SUNDAY é uma constante nomeada do tipo int com valor 0.

O que você acha, como será mais claro para uma pessoa que lê o código?

Legal! Obrigado pelo navegador! Não prestou muita atenção a isso. Normalmente eu o desligo, para não ocupar muito espaço. A ajuda, mesmo que seja apenas um vislumbre, eu a li. Ele não me diz nada sobre arrastar um indireto na janela dos gráficos e um sobre o outro. Embora, eu pudesse ter adivinhado e tentado....))))

Obrigado por explicar a natureza das enumerações! Eu os li muito rapidamente, o MQL é derivado principalmente do C++, e há muitos documentos de doca para ele. Mas muitos erros de impressão na Ajuda e artigos incompletos não são bons.

Resultados: a ajuda escrita correta pode ajudar a evitar muitas perguntas estúpidas de manequins no fórum!

No que diz respeito ao NULL, é zero - é muito usado. Mas os valores máximos das variáveis são muito raros, quase nunca. Por exemplo, uma variável armazena três estados após a análise dos indicadores: COMPRAR, VENDER ou NULL. Se utilizarmos constantes POSITION_TYPE_BUY, POSITION_TYPE_SELL, uma delas é zero. Tenho certeza que EMPTY_VALUE será mais popular do que NULL se você generalizar a todos os tipos).

 
Alexander Puzanov:

Há outra aplicação infinitamente útil. Por exemplo:

E o usuário recebe uma lista suspensa com uma escolha de 4 itens do que você escreveu lá nos comentários - "Comprar somente", "Vender somente", etc. Muito útil para listar um conjunto de indicadores, prazos, um conjunto de condições, etc. na janela de configurações do usuário

Sim, é claro! Neste caso, também podemos acrescentar que simplifica o mecanismo de verificação dos valores inseridos pelo usuário pelo programa. Isto é, todos eles (valores corretos) são descritos inicialmente.
 
agvozdezkiy:

A parte NULL é zero, e é usada com freqüência. Por exemplo, a variável armazena três estados após a análise dos indicadores: COMPRAR, VENDER ou NULL. Se usarmos constantes POSITION_TYPE_BUY, POSITION_TYPE_SELL, uma delas é NULL.

Não há problema, você pode fazer isso dessa maneira:

#define  VALUE_EMPTY -1       // Пустое значение для числовых типов данных
#define  STR_VALUE_EMPTY ""   // Пустое значение для строкового типа

E colocá-lo onde você quiser.

 
Alexey Kozitsyn:

Não há problema, você pode fazer isso dessa maneira:

E coloque-a onde você quiser.

Tudo isso é compreensível. Não é isso que eu quero dizer.
 
agvozdezkiy:
Tudo isso é claro. Não é isso que eu quero dizer.

Então explique o que você quer dizer? Uma única constante para todos os tipos de dados pré-definidos? É improvável que tal coisa venha a ser implementada.

 
Renat Fatkhullin:

Infelizmente, somente programadores experientes entendem a utilidade e a importância de tal aviso.

Bem, recomendo a todos os outros que se alegrem com este nível de ajuda do compilador e corrijam seus próprios erros. Estes são lugares reais de erros potenciais e é exatamente para os desenvolvedores novatos que é extremamente importante aprender.

Você pode fazer o namespace? O problema também seria resolvido então.
 

O tema dos "métodos puramente virtuais" já foi levantado no fórum alguns anos atrás.

Isto é, no conceito C++, métodos virtuais sem corpo, que devem ser anulados nos descendentes:

virtual void Func1() = 0;

Além disso, uma classe contendo tais métodos torna-se automaticamente abstrata. O compilador também rastreia isso. (Bem, é apenas para manter as normas, embora você possa esconder o construtor em um escopo protegido).

Atualmente nos faltam muitos comportamentos de "métodos virtuais puros". Sem esta funcionalidade, você não pode preparar adequadamente uma biblioteca ou estrutura para terceirizá-la: você cria sua própria classe infantil (que não é para nada, mas está embutida como uma engrenagem em outras classes) e é gentil o suficiente para implementar toda a interface. Agora, você herda, não põe em prática um método, o compilador o engole, nada funciona. Escavando através do código fonte da classe mãe?

O conceito de interface é um dos fundamentos do OOP. Portanto, eu realmente gostaria de ver a implementação de tal coisa em 5, e não na MQL6

A propósito, na documentação sobre funções virtuais, há um erro

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

Exemplo:

class Base {
private:
        int a;
public:
        virtual int Func1();
};


class Second: public Base {
public:
        int Func2() {
                return 0;
        };      
};

int OnInit() {

        Base* base = new Base();
        Second* foo = new Second();
   return(INIT_SUCCEEDED);
}

A função virtualFunc1 não tem corpo executável (e nem sequer retorna um valor), mas se compila sem erros.

 
Igor Volodin:

O tema dos "métodos puramente virtuais" já foi levantado no fórum alguns anos atrás.

Isto é, no conceito C++, métodos virtuais sem corpo, que devem ser anulados nos descendentes:

Além disso, uma classe contendo tais métodos torna-se automaticamente abstrata. O compilador também rastreia isso. (Bem, é apenas para manter as normas, embora você possa esconder o construtor em um escopo protegido).

Atualmente nos faltam muitos comportamentos de "métodos virtuais puros". Sem esta funcionalidade, você não pode preparar adequadamente uma biblioteca ou estrutura para terceirizá-la: você cria sua própria classe infantil (que não é para nada, mas está embutida como uma engrenagem em outras classes) e é gentil o suficiente para implementar toda a interface. Agora, você herda, não põe em prática um método, o compilador o engole, nada funciona. Escavando através do código fonte da classe mãe?

O conceito de interface é um dos fundamentos do OOP. Portanto, eu realmente gostaria de ver a implementação de tal coisa em 5, e não na MQL6

A propósito, na documentação sobre funções virtuais, há um erro

Exemplo:

A função virtualFunc1 não tem corpo executável (e nem sequer retorna um valor), mas se compila sem erros.

1. Funções virtuais puras serão adicionadas em breve

2) Onde em seu exemplo está a chamada Func1? Nenhuma chamada - nenhum controle corporal.

 
Slawa:

1. Funções virtuais puras serão adicionadas em breve

2) Onde está a chamada Func1 em seu exemplo? Nenhuma chamada - também nenhum controle corporal.

VS 2015 disse o seguinte

Severidade Código Descrição Projeto Arquivo Linha Estado de Supressão

Erro LNK2001 símbolo externo não resolvido "public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@UAEHXZ) TestCPPCode C:\MyP\AvForex\trunk\TestCPPCode.obj 1

Erro LNK1120 1 externos não resolvidos TestCPPCode C:\MyP\AvForexTrunk\MQL4FilesForFormatting2015\Debug\TestCPPCode.exe 1

 
Alexey Volchanskiy:

VS 2015 disse o seguinte

Severidade Código Descrição Projeto Arquivo Linha Estado de Supressão

Erro LNK2001 símbolo externo não resolvido "public: virtual int __thiscall Base::Func1(void)" (?Func1@Base@UAEHXZ) TestCPPCode C:\MyP\AvForex\trunk\TestCPPCode.obj 1

Erro LNK1120 1 externos não resolvidos TestCPPCode C:\MyP\AvForexTrunk\MQL4FilesForFormatting2015\Debug\TestCPPCode.exe 1

Mostrar código fonte