- Tipos Inteiros
- Tipos Reais (double, float)
- Números complexos (complex)
- Tipo string
- Estruturas, Classes e Interfaces
- Objeto Array Dinâmico
- Matrizes e vetores
- Conversão de Tipo (Typecasting)
- Tipo void e constante NULL
- Tipos personalizados
- Ponteiros de Objeto
- Referência, Modificador & e Palavra-chave this
Tipos personalizados
A palavra-chave typedef em linguagem C++ permite criar tipos personalizados de dados, basta definir o nome do tipo de dados para um tipo de dados existente. Ao fazer isto, não é criado um novo tipo de dados, mas sim é definido um novo nome para o tipo existente. Graças ao uso de tipos personalizados, você pode tornar o programa mais flexível, basta suficiente alterar as instruções typedef usando os macros de substituição (#define). Usar os tipos personalizados também pode melhorar a legibilidade do código, uma vez que, para os tipos de dados padrão, você pode usar seus próprios nomes descritivos com ajuda de typedef. Formato geral para escrever instruções a fim de criar um tipo personalizado:
typedef tipo novo_nome; |
Aqui o elemento tipo representa qualquer tipo de dados válido, enquanto o elemento novo_nome é o nome novo para este tipo. É importante notar que o novo nome é definido apenas como um complemento para o nome existente do tipo e não para substituí-lo. Na linguagem MQL5, você pode criar um ponteiro para a função, usando typedef.
Ponteiro para a função
Ponteiro para a função geralmente é determinado pelo formato de registro
typedef tipo_de_resultado_de_função (*Nome_de_tipo_de_função)(lista_de_tipos_de_parâmetros_de_entrada); |
onde, após a palavra typedef, é definida a assinatura da função, isto é, o número e tipo de parâmetros de entrada, bem como o tipo de resultado a ser retornado pela função. Aqui está uma explicação de como criar e usar um ponteiro para uma função:
// --- declaramos o ponteiro para uma função que aceita dois parâmetros do tipo int
|
Neste exemplo, à variável func_ptr podem ser atribuídas as funções sub e add, uma vez que cada uma delas tem dois parâmetros de entrada do tipo int, conforme especificado na definição do ponteiro para a função TFunc. Aqui à função neg não pode ser atribuído o ponteiro func_ptr, uma vez que sua assinatura é diferente.
Organização dos modelos de eventos na interface personalizada
Usando os ponteiros para a função você pode facilmente construir a manipulação de eventos ao criar a interface personalizada. Mostraremos um exemplo a partir da seção CButton sobre como criar botões e adicionar neles uma função para processamento do carregamento do botão. Em primeiro lugar, definimos o ponteiro para a função TAction, ela será chamada pressionando um botão, e criaremos três funções em conformidade com a descrição TAction.
//--- criamos o tipo personalizado de função
|
Logo realizamos a classe MyButton a partir do CButton, em que adicionamos o membro TAction que, por sua vez, é o ponteiro para a função.
//+------------------------------------------------------------------+
|
Em seguida, criamos a classe derivada CControlsDialog a partir da CAppDialog, à qual adicionamos a matriz m_buttons para armazenas os botões do tipo MyButton, bem como os métodos AddButton(MyButton &button) e CreateButtons().
//+------------------------------------------------------------------+
|
Agora podemos escrever o programa usando o painel de controle CControlsDialog, no qual são criados 3 botões "Open", "Save" e "Close". Ao pressionar o botão, é chamada a função correspondente que está escrita como um ponteiro para a função TAction.
//--- declaramos o objeto no nível global para criá-lo automaticamente ao inciar o programa
|
A aparência do aplicativo em execução e os resultados dos botões pressionados são mostrados na imagem.
Código-fonte completo do programa
//+------------------------------------------------------------------+
|
Veja também