Erreurs, bugs, questions - page 1639

 
Ilyas:
Nous l'avons fait délibérément, car l'héritage direct ne pose aucun problème.

J'aimerais connaître la règle exacte : quand ai-je le droit de remplacer une fonction virtuelle par un autre type de valeur de retour ?

Ou est-ce une surcharge ?

 
Koldun Zloy:

J'aimerais connaître la règle exacte : quand ai-je le droit de remplacer une fonction virtuelle par un autre type de valeur de retour ?

Un seul cas, lors du retour d'un pointeur vers un objet de classe, où le type de retour de la fonction surchargée hérite (est le premier parent dans l'héritage multiple, pas encore supporté dans MQL) du type que la fonction surchargée retourne.
 

Merci. Tout a un sens.

 
Ilyas:
...lorsque le type de retour d'une fonction surchargée est hérité ... à partir du type renvoyé par celui qui est surchargé.

Et si c'était l'inverse ?

class A {};
class B : public A {};
class C {
        virtual B *f() { return NULL; }
};
class D {
        virtual A *f() { return NULL; } //нормально
};
 
A100:

Et si c'était l'inverse ?

Vous avez une erreur dans votre exemple - il n'y a pas d'héritage de D à partir de C.
 
Ilyas:
Vous avez une erreur dans votre exemple - pas d'héritage de D à partir de C

Oui, mon erreur, désolé.

class A {};
class B : A {};
class C {
        virtual B *f() { return NULL; }
};
class D : C {
        virtual A *f() { return NULL; } //Error: overriding virtual function with different return type
};
 

Un autre exemple controversé :

class C;
class A {
        virtual A *f() { return NULL; }
};
class B : A {
        virtual C *f() { return NULL; } //Error: overriding virtual function with different return type
};
class C : B {
        virtual C *f() { return NULL; } //нормально
};
 
A100:

Un autre exemple controversé :

Malgré l'erreur (car il n'y aura pas de génération d'exécutable), la fonction B::f surcharge A::f, donc il n'y a pas d'erreur de surcharge pour C::f.
 
Ilyas:
Malgré l'erreur (car il n'y aura pas de génération d'exécutable), la fonction B::f surcharge A::f, donc il n'y a pas d'erreur de surcharge pour C::f.

Je ne comprends pas bien l'idée, mais c'est presque la même chose.

class C;
class A {
        virtual A *f() { return NULL; }
};
class B : A {
        virtual C *f() { return NULL; } //Error: overriding virtual function with different return type
};
class C : A {};
class C;
class A {
        virtual A *f() { return NULL; }
};
class C : A {};
class B : A {
        virtual C *f() { return NULL; } //нормально
};
Il y a une erreur dans un cas et aucune erreur dans l'autre. Et j'ai juste échangé les lignes
 

Bonne journée à vous tous !)

QUESTION :

-Si je ne programme pas en MT4/5, puis-je trouver un programmeur qui peut revoir mon système d'indicateurs et l'écrire ? J'ai une bonne idée de comment l'utiliser.

Contactez-moi en personne, s'il vous plaît ...