Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Même en supposant que void Del(C_A *p) dans l'ancêtre est suffisant pour effacer le pointeur de n'importe quel descendant, je ne vois pas l'utilité d'utiliser
C'est une autre question :) - la question de l'opportunité. Je suis intéressé par la question de la justesse/littérature d'une telle approche.
Toutes les options semblent bonnes, tant que le pointeur est retiré correctement.
Et il semble avoir été supprimé, même les fuites de mémoire ont cessé d'apparaître (je ne sais pas pourquoi elles sont apparues la dernière fois)...
Toutes les options semblent bonnes tant que le pointeur est supprimé correctement.
Et il semble être supprimé, même les fuites de mémoire n'apparaissent plus (qui sait pourquoi il est apparu la dernière fois)...
Cela a l'air cool de l'extérieur - l'objet s'écrasera tout seul.
C'est pas cool - quand tu pars, tu "tues" tout le monde...
Ce code est un peu plus cool (il plante tout dans le tableau).
Mais la partie la plus cool est lorsque le tableau est intégré dans une classe enfant...
Question sur le polymorphisme.
Vous trouverez un exemple dans la documentation:
CShape[10] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for (int i=0; i<10;i++)
{
//--- тип и площадь фигуры
Print("Объект типа "+shapes[i].GetType()+" имеет площадь "+ shapes[i].GetArea());
};
Pas tout à fait sûr de ce qui devrait être en place
//... здесь заполняем массив производными объектами
Puis-je avoir au moins un exemple ?
Et pourquoi la taille d'un tableau est-elle spécifiée pour un type de variable et non pour la variable elle-même ?
En outre, il semble y avoir des erreurs dans la déclaration des classes dans le même chapitre de la documentation:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
Et pourquoi la dimensionnalité du tableau est-elle spécifiée par le type de variable et non par la variable elle-même ?
C'est une pure erreur de frappe.
En outre, il semble y avoir des erreurs dans la déclaration des classes dans le même chapitre de la documentation:
class CShape{};
class CCircle{} : public CShape
class CSquare{} : public CShape
Faites-vous référence aux crochets après le nom de la classe déclarée ?
Question sur le polymorphisme.
Vous trouverez un exemple dans la documentation:
CShape[10] shapes; // массив объектов CShape
//... здесь заполняем массив производными объектами
for (int i=0; i<10;i++)
{
//--- тип и площадь фигуры
Print("Объект типа "+shapes[i].GetType()+" имеет площадь "+ shapes[i].GetArea());
};
Je ne suis pas tout à fait sûr de ce qui devrait être mis en place.
//... здесь заполняем массив производными объектами
Puis-je avoir au moins un exemple ?
Avant votre exemple de la documentation, il y a cette phrase : "Maintenant nous pouvons déclarer un tableau de type Shape et le remplir avec des objets de classes dérivées. Le tableau shapes[10] doit donc être rempli d'instances de classes dérivées de CShape. N'est-ce pas ?
Il existe deux exemples de classes dérivées dans la même documentation : CCircle et CSquare. Il nous reste donc à créer des instances de ces deux classes, par exemple :
... et remplissons les deux premiers éléments de notre tableau shapes[10] avec eux :
Êtes-vous d'accord ?
Avant votre exemple de la documentation, il y a cette phrase : "Maintenant nous pouvons déclarer un tableau de type Forme et le remplir avec des objets de classes dérivées". Par conséquent, le tableau shapes[10] doit être rempli d'instances de classes dérivées de CShape. N'est-ce pas ?
Il existe deux exemples de classes dérivées dans la même documentation : CCircle et CSquare. Il nous reste donc à créer des instances de ces deux classes, par exemple :
... et remplissons les deux premiers éléments de notre tableau shapes[10] avec eux :
Êtes-vous d'accord ?
Je suis peut-être d'accord, mais le compilateur génère une erreur :
shape" - la structure a des objets et ne peut pas être copiée test.mq5 36 3
Je pourrais être d'accord, mais le compilateur génère une erreur :
shape" - la structure a des objets et ne peut pas être copiée test.mq5 36 3
Pouvez-vous citer le code complet ?
Bien sûr :
//+------------------------------------------------------------------+
//| 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);
}
//+------------------------------------------------------------------+