O POE para crianças em idade escolar. - página 17

 
Artyom Trishkin:

É exatamente o mesmo que com as variáveis.

E o foco:

de que serve este ponteiro se o comércio está disponível na função OnTrade

#include <Trade\Trade.mqh>
CTrade trade;   // Объект № 1 в глобальной области программы

int OnInit()
{
 trade.SetExpertMagicNumber(123);
}

void OnTick()
{
 trade.Buy(0.1);
}
 
Alexey Viktorov:

Para que serve este ponteiro se ele está disponível na função OnTrade

Nenhuma. Mas com isso mostrei a diferença entre a maneira como você escreveu outro (segundo) objeto do mesmo tipo, e a maneira como você pode acessar um único objeto por ponteiro.

Foi um exemplo simplificado para responder à sua pergunta sobre diferenças e preferências.

Você sabe, você faz perguntas com exemplos muito simples, e quando você é respondido, você faz outra pergunta - bastante razoável - "por quê?".

Porque seus exemplos não precisam ser resolvidos com aulas.

Há duas opções aqui - ou você lê e entende o que está sendo dito, ou... Ou você resolve seus problemas de forma processual. Nesse caso, você não terá perguntas "por que razão".

Agora imagine que sua classe CTrade não está no escopo global. И ?

Imagine também, que você não tenha apenas um desses objetos (como está em quase todos os exemplos no kodobase), mas tantos símbolos quanto você adicionar/remover manualmente do programa. И ?

 
Сергей Таболин:

Nesse caso, é o

descrição incorreta?

Meu entendimento era que, se definido para a EA, então quaisquer ordens/posições deveriam ter este magik. ((

Por que de repente está incorreto?

Um EA pode ter vários magos e todos eles são dele.

Mesmo em um ulong-magic, você pode armazenar um Expert ID comum + alguns magos + alguns IDs diferentes, e ainda tem muito espaço sobrando.

 
Artyom Trishkin:

Nenhuma. Mas com isso mostrei a diferença entre a maneira como você escreveu outro (segundo) objeto do mesmo tipo, e a maneira como você pode acessar um único objeto por ponteiro.

Foi um exemplo simplificado para responder à sua pergunta sobre diferenças e preferências.

Você sabe, você faz perguntas com exemplos muito simples, e quando você é respondido, você faz outra pergunta - bastante razoável - "por quê?".

Porque seus exemplos não precisam ser resolvidos com aulas.

Há duas opções aqui - ou você lê e entende o que está sendo dito, ou... Ou você resolve seus problemas de forma processual. Nesse caso, você não terá perguntas "por que razão".

Agora imagine que sua classe CTrade não está no escopo global. И ?

Imagine também, que você não tenha um desses objetos (como está em quase todos os exemplos no kodobase), mas tantos caracteres que você adiciona/remova manualmente do programa. И ?

Não, Artyom, eu faço perguntas para compreensão, não para aplicação. E quando você sugere uma solução para uma idéia idiota, é quando eu pergunto "Por quê?". Vejam, se eu voltar a perguntar à minha maneira e receber a resposta certa ou errada, penso eu, então tudo o que me foi dito sobre isso eu não esquecerei mais e o farei com compreensão, ou com compreensão eu não o farei. Eu tenho minhas próprias baratas...)) Eu não sei como fazer algo sem entender. Nunca resolvi um problema de matemática apenas a partir de uma solução de amostra. Eu não sei como. Eu tive 5 F's e um B em matemática no ano em que terminei a oitava série. Bem, eles me deixam fazer os exames com a condição de que se eu escrever um ensaio com um C, serei autorizado a passar nos exames, corrigir os F's e eles me deixarão ir à GPTU. O instituto foi muito mais tarde. Foi aí que adoeci com a programação, mas ela só foi ensinada superficialmente. E o OOP naquela época, parece-me, pode ter sido concebido apenas recentemente.

 
Alexey Viktorov:

Não Artem, eu faço perguntas para compreensão, não para aplicação. E quando você oferece uma solução para uma idéia idiota, é quando eu pergunto "Por quê?". Vejam, se eu voltar a perguntar à minha maneira e receber a resposta certa ou errada, penso eu, então tudo o que me foi dito sobre isso eu não esquecerei mais e o farei com compreensão, ou com compreensão eu não o farei. Eu tenho minhas próprias baratas...)) Eu não sei como fazer algo sem entender. Nunca resolvi um problema de matemática apenas a partir de uma solução de amostra. Eu não sei como. Eu tive 5 F's e um B em matemática no ano em que terminei a oitava série. Bem, eles me deixam fazer os exames com a condição de que se eu escrever um ensaio com um C, serei autorizado a passar nos exames, corrigir os F's e eles me deixarão ir à GPTU. O instituto foi muito mais tarde. Foi aí que adoeci com a programação, mas ela só foi ensinada superficialmente. E o OOP naquela época, parece-me, pode ter sido concebido apenas recentemente.

Então, é estranho que você tenha feito estas perguntas em primeiro lugar.

Você entende a diferença entre as variáveis declaradas em âmbitos diferentes. Você tem. E você faz uma pergunta como se pela primeira vez ouvisse falar deescopos de variáveis.

Quando lhe é mostrado como usar um ponteiro para um objeto criado anteriormente, você faz uma pergunta estranha - "por que, se o objeto já está visível? Portanto, não lhe foi mostrado como fazê-lo, mas como obter um ponteiro nesse exemplo e referir-se ao objeto pelo ponteiro. E não serão dois objetos diferentes em âmbitos diferentes, mas um só.
Mas e se o objeto não estiver no escopo global, mas dentro de algum outro objeto? E esse outro objeto apenas devolve um ponteiro para o objeto CTrade que você precisa. Neste caso, o exemplo não daria origem à pergunta "por quê? Acho que não vai. Mas pode estar implícito que você é respondido na suposição de que entende a simplicidade de seu exemplo e omite a visibilidade global do objeto "atrás dos parênteses".

 
Artyom Trishkin:

Por que de repente seria incorreto?

Um especialista pode ter vários mágicos e todos eles são dele.

Mesmo em uma mágica você pode armazenar uma ID comum da EA + várias mágicas + várias IDs diferentes e ainda tem muito espaço.

Eu entendo. Ao fazer um pedido comercial, você pode especificar qualquer mágico. Um EA pode abrir cada nova posição com um novo mágico. Eu também codifico o símbolo, TF, etc. em meu mágico. Tudo isso é claro.

Somente eu tinha certeza de queSetExpertMagicNumber é como uma solução global. Se um pedido comercial não especificar explicitamente uma magia, então ele toma o valor definido através doSetExpertMagicNumber. Caso contrário, eu pessoalmente não vejo o sentido disso).

 
Сергей Таболин:

Eu entendo. Ao fazer um pedido comercial, você pode especificar qualquer feiticeiro. Um EA pode abrir cada nova posição com um novo magik. Eu também codifico um símbolo, TF, etc. em meu magik. Tudo isso é claro.

Somente eu tinha certeza de queSetExpertMagicNumber é como uma solução global. Se um pedido comercial não especificar explicitamente uma magia, então ele toma o valor definido através do SetExpertMagicNumber. Caso contrário, eu pessoalmente não vejo o sentido disso ))

O método estabelece o número mágico não para o Expert Advisor, mas para um objeto de uma classe comercial. Pode haver várias classes comerciais em uma EA e um número mágico separado pode ser definido para cada uma delas, o que inclui em seu valor tanto um número mágico comum para a EA quanto um número mágico separado para cada um dos objetos comerciais.

 
Artyom Trishkin:

Então, é estranho que você tenha feito estas perguntas.

Não é nada estranho. Se eu não entendia nada de OOP, então eu não tinha certeza, ou tinha algumas dúvidas, de que o entendia corretamente. Pedi esclarecimentos, recebi confirmação e agora tenho certeza (de amanhã). Como aquele monólogo de G. Hazanov.

- Imagine que você está parado na janela, e na janela oposta, desprevenido é uma mulher nua. O que você sente?

- Confiança no futuro.

- E qual é o seu próximo passo?

- Estou me mudando para outra sala. Eu tenho uma janela maior lá.

 
Alexey Viktorov:

Estou correto ao assumir que com esta opção

sem considerar um aviso de compilação, a posição pode ser aberta com um número mágico diferente de 123 ?

Ou seja, um novo objeto será criado na função OnTick e o número mágico nele não será igual a 123.

A posição será aberta com um número mágico igual a "0" - ou seja, a linha

void OnTick()
{
 CTrade trade;

recria o objeto e a magia CTrade é inicializada a "0" por padrão (no construtor de classes) ao criar um objeto de classe comercial:

//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CTrade::CTrade(void) : m_async_mode(false),
   m_magic(0),
   m_deviation(10),
   m_type_filling(ORDER_FILLING_FOK),
   m_log_level(LOG_LEVEL_ERRORS)
 
Vladimir Karputov:

A posição será aberta com um número mágico igual a "0" - ou seja, string

recria o objeto novamente e a magia CTrade é inicializada com zero por padrão (no construtor de classes) ao criar um objeto de classe comercial:

Sim? Ele não cria um objeto novo e independente?