OLP. Questões de aplicação - página 2

 
Urain:

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)
     {
      case 0: m_shape=new CTetrisShape1; break;
      case 1: m_shape=new CTetrisShape2; break;
      case 2: m_shape=new CTetrisShape3; break;
      case 3: m_shape=new CTetrisShape4; break;
      case 4: m_shape=new CTetrisShape5; break;
      case 5: m_shape=new CTetrisShape6; break;
      case 6: 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.
 
Urain:

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.


A isto chama-se agregação
 
Yedelkin:

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 tirei parênteses :o)
 
Urain:
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...

      case  50: d_Control=new CControl_50; break;

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?

 
Yedelkin:

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.

 
Urain:

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.

Até agora só posso falar sobre os resultados da compilação. É ainda um longo caminho a percorrer para verificar se o código funciona realmente.
 

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);

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Em mql5, não se pode passar parâmetros ao construtor.
 
Vigor:
Em mql5 nenhum parâmetro pode ainda ser passado para o construtor.

esclarecer " Em mql5 nenhum parâmetro pode ainda ser passado ao construtor".
 
PiramidaR:

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