Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Mesmo assumindo que o Del(C_A *p) vazio no antepassado é suficiente para apagar qualquer ponteiro descendente, não vejo a utilidade de usar
Essa é outra questão :) - a questão da oportunidade. Estou interessado na questão da correcção/iliteracia de tal abordagem.
Todas as opções parecem ser boas desde que o ponteiro seja removido correctamente.
E parece ter sido removida, até as fugas de memória deixaram de aparecer (não sei porque apareceu da última vez)...
Todas as opções parecem ser boas desde que o ponteiro seja apagado correctamente.
E parece ter sido removida, mesmo as fugas de memória deixam de aparecer (quem sabe porquê da última vez que surgiu)...
Tem um aspecto fresco do exterior - o objecto vai-se colidir sozinho.
Não é fixe - quando se sai, "mata-se" toda a gente...
Este código é um pouco mais fixe (bloqueia tudo na matriz).
Mas a parte mais fixe é quando o conjunto é incorporado numa classe infantil.
A questão do polimorfismo.
Há um exemplo disto na documentação:
CShape[10] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for (int i=0; i<10;i++)
{
//--- тип и площадь фигуры
Print("Объект типа "+shapes[i].GetType()+" имеет площадь "+ shapes[i].GetArea());
};
Não tenho bem a certeza do que deve estar no lugar
//... здесь заполняем массив производными объектами
Posso ter pelo menos 1 exemplo?
E porque é que o tamanho de uma matriz é especificado para um tipo de variável e não para a variável em si?
Além disso, parece haver erros na declaração de classes no mesmo capítulo da documentação:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
E porque é que a dimensionalidade da matriz é especificada pelo tipo de variável e não pela variável em si?
Isto é uma gralha pura.
Além disso, parece haver erros na declaração de aulas no mesmo capítulo de documentação:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
Está a referir-se a parênteses curvos após o nome da classe que está a ser declarada?
Pergunta sobre o polimorfismo.
Há um exemplo disto na documentação:
CShape[10] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for (int i=0; i<10;i++)
{
//--- тип и площадь фигуры
Print("Объект типа "+shapes[i].GetType()+" имеет площадь "+ shapes[i].GetArea());
};
Não tenho bem a certeza do que deveria estar no lugar.
//... здесь заполняем массив производными объектами
Posso ter pelo menos 1 exemplo?
Antes do seu exemplo da documentação, há esta frase: "Agora podemos declarar um conjunto de tipos de Forma e preenchê-lo com objectos de classes derivadas. Assim, a matriz de formas[10] deve ser preenchida com instâncias de classes derivadas de CShape. Certo?
Há dois exemplos de classes derivadas na mesma documentação: CCircle e CSquare. Resta-nos, portanto, criar instâncias destas duas classes, por exemplo:
... e preencher os dois primeiros elementos das nossas formas de matriz[10] com eles:
De acordo?
Antes do seu exemplo da documentação, há esta frase: "Agora podemos declarar um conjunto de tipos de Forma e preenchê-lo com objectos de classes derivadas". Por conseguinte, as formas de matriz[10] devem ser preenchidas com instâncias de classes derivadas de CShape. Certo?
Há dois exemplos de classes derivadas na mesma documentação: CCircle e CSquare. Resta-nos, portanto, criar instâncias destas duas classes, por exemplo:
... e preencher os dois primeiros elementos das nossas formas de matriz[10] com eles:
Concorda?
Posso concordar, mas o compilador gera um erro:
'forma' - a estrutura tem objectos e não pode ser copiada teste.mq5 36 3
Eu posso concordar, mas o compilador gera um erro:
'forma' - a estrutura tem objectos e não pode ser copiada teste.mq5 36 3
Pode citar o código completo?
Claro:
//+------------------------------------------------------------------+
//| test.mq5 |
//| Ya |
//| Ya |
//+------------------------------------------------------------------+
#property copyright "Ya"
#property link "Ya"
#property version "1.00"
#property indicator_chart_window
//--- Базовый класс
class CShape
{
protected:
int m_type; // тип фигуры
int m_xpos; // X - координата точки привязки
int m_ypos; // Y - координата точки привязки
public:
void CShape(){m_type=0;}; // конструктор, тип равен нулю
int GetType(){return(m_type);};// возвращает тип фигуры
virtual
double GetArea(){return (0); }// возвращает площадь фигуры
};
//--- производный класс Круг
class CCircle: public CShape // после двоеточия указывается базовый класс,
{ // от которого производится наследование
private:
double m_radius; // радиус круга
public:
void CCircle(){m_type=1; m_radius=10;}; // конструктор, тип равен 1
void SetRadius(double r){m_radius=r;};
double GetArea(){return (3.14*m_radius*m_radius);}// площадь круга
};
//--- производный класс Квадрат
class CSquare: public CShape // после двоеточия указывается базовый класс,
{ // от которого производится наследование
private:
double m_square_side; // сторона квадрата
public:
void CSquare(){m_type=2;}; // конструктор, тип равен 2
void SetSide(double s){m_square_side=s;};
virtual double GetArea(){return (m_square_side*m_square_side);}//площадь квадрата
};
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
CShape shape[10]; // массив объектов CShape
//... здесь заполняем массив производными объектами
CCircle circle;
shape[1]=circle;
Print("Объект типа "+shape[1].GetType()+" имеет площадь "+ shape[1].GetArea());
//---
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+