Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Anche assumendo che void Del(C_A *p) nell'antenato sia sufficiente per cancellare il puntatore di qualsiasi discendente, non vedo il motivo di usare
Questa è un'altra questione :) - la questione della convenienza. Mi interessa la questione della correttezza/letteratura di tale approccio.
Tutte le opzioni sembrano essere buone, a patto che il puntatore sia rimosso correttamente.
E sembra essere stato rimosso, anche le perdite di memoria hanno smesso di apparire (non so perché sia apparso l'ultima volta)...
Tutte le opzioni sembrano essere buone finché il puntatore viene cancellato correttamente.
E sembra essere stato rimosso, anche le perdite di memoria smettono di apparire (chissà perché è venuto fuori l'ultima volta)...
Sembra figo dall'esterno - l'oggetto si schianta da solo.
Non è bello - quando te ne vai, "uccidi" tutti...
Questo codice è un po' più fresco (blocca tutto nell'array).
Ma la parte più bella è quando l'array è costruito in una classe figlia...
Domanda sul polimorfismo.
C'è un esempio di questo nella documentazione:
CShape[10] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for (int i=0; i<10;i++)
{
//--- тип и площадь фигуры
Print("Объект типа "+shapes[i].GetType()+" имеет площадь "+ shapes[i].GetArea());
};
Non sono sicuro di cosa dovrebbe esserci
//... здесь заполняем массив производными объектами
Posso avere almeno 1 esempio?
E perché la dimensione di un array è specificata per un tipo di variabile e non per la variabile stessa?
Inoltre, sembrano esserci errori nella dichiarazione delle classi nello stesso capitolo della documentazione:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
E perché la dimensionalità dell'array è specificata dal tipo di variabile e non dalla variabile stessa?
Questo è un puro errore di battitura.
Inoltre, sembrano esserci errori nella dichiarazione delle classi nello stesso capitolo della documentazione:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
Ti riferisci alle parentesi graffe dopo il nome della classe dichiarata?
Domanda sul polimorfismo.
C'è un esempio di questo nella documentazione:
CShape[10] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for (int i=0; i<10;i++)
{
//--- тип и площадь фигуры
Print("Объект типа "+shapes[i].GetType()+" имеет площадь "+ shapes[i].GetArea());
};
Non sono sicuro di cosa dovrebbe esserci.
//... здесь заполняем массив производными объектами
Posso avere almeno 1 esempio?
Prima del vostro esempio dalla documentazione, c'è questa frase: "Ora possiamo dichiarare un array di tipo Shape e riempirlo con oggetti di classi derivate. Quindi l'array shapes[10] dovrebbe essere riempito con istanze di classi derivate da CShape. Giusto?
Ci sono due esempi di classi derivate nella stessa documentazione: CCircle e CSquare. Quindi ci resta da creare istanze di queste due classi, per esempio:
... e riempire i primi due elementi del nostro array shapes[10] con essi:
Sei d'accordo?
Prima del vostro esempio dalla documentazione, c'è questa frase: "Ora possiamo dichiarare un array di tipo Shape e riempirlo con oggetti di classi derivate". Pertanto, l'array shapes[10] dovrebbe essere riempito con istanze di classi derivate da CShape. Giusto?
Ci sono due esempi di classi derivate nella stessa documentazione: CCircle e CSquare. Quindi ci resta da creare istanze di queste due classi, per esempio:
... e riempire i primi due elementi del nostro array shapes[10] con essi:
Sei d'accordo?
Posso essere d'accordo, ma il compilatore genera un errore:
'shape' - la struttura ha oggetti e non può essere copiata test.mq5 36 3
Potrei essere d'accordo, ma il compilatore genera un errore:
'shape' - la struttura ha oggetti e non può essere copiata test.mq5 36 3
Puoi citare il codice completo?
Certo:
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+