Erreurs, bugs, questions - page 1678

 
fxsaber:
Mais comme le montre l'exemple ci-dessus, on ne peut pas faire d'analogie. Vous devez spécifier final même pour les méthodes privées.

Étrange. Pour un héritage public, l'accès maximal doit être protégé, et non privé.

Et la fonction dans l'exemple est surchargée exactement ?

 
Комбинатор:

Étrange. Pour un héritage public, l'accès maximal doit être protégé, et non privé.

Et dans l'exemple, la fonction est-elle exactement surchargée ?

Bien. Je viens de le découvrir moi-même.

Si vous le faites

BASE() {Func();} // вместо void Init() {Func();} Вызов  Base.Init() - убрать конечно.

vous pouvez vérifier vous-même après l'avoir exécuté et voir si vous savez ce qui est censé se passer.

 

Dans le journal du terminal, j'obtiens

2016.09.12 15:49:14.209 Simple_Test (RTS-9.16,M1)       array out of range in 'Simple_Test.mqh' (85,33)

se rendre maladroitement à l'endroit spécifié dans le code source. Il serait pratique de pouvoir double-cliquer sur un tel message dans le journal du terminal et d'accéder directement à la ligne spécifiée.

Si quelqu'un le soutient, qu'il s'exprime.

 
Sergei Vladimirov:

Le classique est une interface dans une classe de base avec une redéfinition dans les descendants :

Le cas classique est celui où les méthodes protégées/public-virtuelles sont surchargées. Mais pour les particuliers, ce n'est pas si évident (en termes d'application). Merci pour la réponse.
 
fxsaber:
Le cas classique est celui où des méthodes virtuelles protégées/publiques sont surchargées. Mais pour les particuliers, ce n'est pas si évident (en termes d'application). Merci de votre réponse.

Oui, j'ai déjà supprimé mon exemple sans voir votre réponse, c'était vraiment malheureux.

Mises à jour. Je me suis moi-même embrouillé dans les bases pendant que je vous répondais. Tout était correct dans cet exemple, je n'aurais pas dû le supprimer. Le même exemple encore avec un exemple d'utilisation :

class CAnimal
{
private:
   void virtual Speak(){}
};

class CDog : public CAnimal
{
public:
   void Speak(){Print("Гав!");}
};

class CBigDog : public CDog
{
public:
   void Speak(){Print("Громкий гав!");}
};

void OnStart()
{
   CDog oDog;
   oDog.Speak();
   
   CBigDog oBigDog;
   oBigDog.Speak();
   
   CDog* pDog = &oBigDog; 
   pDog.Speak();       // "Громкий гав!", а не "Гав!", как было бы без виртуального метода
}
 
Sergei Vladimirov:

Mises à jour. J'étais moi-même confus par les bases pendant que je vous répondais. Tout était correct dans cet exemple, je n'aurais pas dû le supprimer. Encore une fois avec un exemple d'utilisation :

Ce n'est pas un bon exemple, puisque l'interface CAnimal n'est utilisée nulle part. Oui, ils ont également rendu publics deux descendants. Je comprends le sujet, donc c'est bon.
 
#property indicator_buffers 1 + 1

Le compilateur n'en fait qu'à sa tête.

 
fxsaber:
Ce n'est pas un bon exemple, car on ne voit l'interface CAnimal utilisée nulle part. Deux descendants ont également été rendus publics. Je comprends le sujet, donc c'est bon.

Exemple normal. Un animal abstrait émet un certain son, mais non défini, de sorte que nous ne pouvons pas appeler la méthode Speak() sur lui ; elle ne peut être appelée que sur un animal d'une espèce spécifique. Par conséquent, nous déclarons une méthode virtuelle fermée dans une classe de base, et la surcharge dans les descendants et l'ouvre.

 
Sergei Vladimirov:

Exemple normal. Un animal abstrait émet un son quelconque, mais non défini, de sorte que nous ne pouvons pas appeler la méthode Speak() sur lui ; elle ne peut être appelée que sur un animal d'une espèce spécifique. Par conséquent, nous déclarons une méthode virtuelle fermée dans une classe de base, et la surcharge dans les descendants et l'ouvre.

Il serait utile de le rendre privé dans les classes descendantes également. Pour une meilleure compréhension. Ce n'est pas le sujet, en somme.
 
fxsaber:
Il serait bon de le rendre privé dans les descendants aussi. Pour une meilleure compréhension. Ce n'est pas le sujet, en somme.
Il devrait être appelé dans les descendants. )
Raison: