O novo operador cria uma instância da classe e um construtor é chamado em conjunto com ela. Está escrito na sintaxe, por isso não há outra forma de lhe chamar.
Procedi a partir deste exemplo:
//+------------------------------------------------------------------+//| Создание фигуры |//+------------------------------------------------------------------+void CTetrisField::NewShape()
{
m_ypos=HORZ_BORDER;
//--- случайным образом создаём одну из 7 возможных фигурint nshape=rand()%7;
switch(nshape)
{
case0: m_shape=new CTetrisShape1; break;
case1: m_shape=new CTetrisShape2; break;
case2: m_shape=new CTetrisShape3; break;
case3: m_shape=new CTetrisShape4; break;
case4: m_shape=new CTetrisShape5; break;
case5: m_shape=new CTetrisShape6; break;
case6: m_shape=new CTetrisShape7; break;
}
Grosso modo, não há aqui parênteses (chamada do construtor). É possível que eu ainda não esteja a compreender alguma coisa.
Não li a descrição da criação dinâmica de objectos de classe em MQL5, mas em C++ é possível fazê-lo sem parênteses (chama-se construtor padrão) e com parênteses (chama-se construtor dependendo dos parâmetros entre parênteses). Exemplo:
class CExample { int param; public: CExample(); CExample(int x); ~CExample(); }
CExample::CExample(int x) { param = x; }
//..........вызов.............. //..где-то в тексте программы..
CExample *ex1 = new CExample; //создание с конструктором CExample(); CExample *ex1 = new CExample(); //создание с конструктором CExample(); CExample *ex1 = new CExample(value); //создание с конструктором CExample(int x);
Não li a descrição da criação dinâmica de objectos de classe em MQL5, mas em C++ é possível fazê-lo sem parênteses (chama-se construtor padrão) e com parênteses (chama-se construtor dependendo dos parâmetros entre parênteses). Exemplo:
Já percebi, obrigado pela explicação simples e directa. Acontece que os parênteses são para possíveis parâmetros.
E a descrição de como criar objectos dinâmicos de classe em MQL5 é muito concisa:
O novo operador cria uma instância da classe e um construtor é chamado em conjunto com ela. Está escrito na sintaxe, por isso não há outra forma de lhe chamar.
Procedi a partir deste exemplo:
Grosso modo, não há aqui parênteses (chamada do construtor). É possível que eu ainda não esteja a compreender alguma coisa.Este código quase não é diferente de herança múltipla.
Na verdade, a classe C_C tem acesso aos dados de C_A e C_B através de indicadores apropriados.Baseei-me neste exemplo:
Aqui, grosso modo, não há parênteses (chamadas de construtores). É possível que eu ainda não compreenda alguma coisa.Porquê eu, não é para mim, é para a lavandaria central, eu não usei parênteses :o)
O meu compilador não se queixa de parênteses em falta...
Seja como for, surgiu subitamente uma questão: qual é o caminho certo? Ou não faz diferença se existem ou não parênteses?
O meu compilador não se queixa de parênteses em falta...
De qualquer forma, surgiu subitamente uma questão: qual é a forma correcta de o fazer? Ou não faz diferença se existem ou não parênteses?
Se funciona nos dois sentidos, é antes uma questão de unificação de sintaxe. O principal é que isso não afecta a velocidade.
ZS E funciona de todo? Para ser honesto, não verifiquei, escrevo sempre com parênteses.
Se funciona nos dois sentidos, é mais uma questão de unificação de sintaxe. O principal é não afectar a velocidade.
ZS Será que funciona? Para ser honesto, ainda não verifiquei, escrevo sempre com parênteses.
Não li a descrição da criação dinâmica de objectos de classe em MQL5, mas em C++ é possível fazê-lo sem parênteses (chama-se construtor padrão) e com parênteses (chama-se construtor dependendo dos parâmetros entre parênteses). Exemplo:
class CExample
{
int param;
public:
CExample();
CExample(int x);
~CExample();
}
CExample::CExample(int x)
{
param = x;
}
//..........вызов..............
//..где-то в тексте программы..
CExample *ex1 = new CExample; //создание с конструктором CExample();
CExample *ex1 = new CExample(); //создание с конструктором CExample();
CExample *ex1 = new CExample(value); //создание с конструктором CExample(int x);
Em mql5 nenhum parâmetro pode ainda ser passado para o construtor.
Não li a descrição da criação dinâmica de objectos de classe em MQL5, mas em C++ é possível fazê-lo sem parênteses (chama-se construtor padrão) e com parênteses (chama-se construtor dependendo dos parâmetros entre parênteses). Exemplo:
Já percebi, obrigado pela explicação simples e directa. Acontece que os parênteses são para possíveis parâmetros.
E a descrição de como criar objectos dinâmicos de classe em MQL5 é muito concisa:
Referência MQL5 / Noções básicas de linguagem / Operadores / Operador de criação de objectos novo
Referência MQL5 / Noções básicas de linguagem / Tipos de dados / Apontadores de objectos