IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

L'héritage et son application


Sujet :

WinDev

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut L'héritage et son application
    Bonjour à tous, comme le remarque le nom du topic, ma demande tourne autour de l'héritage. Je m'explique.


    J'ai une super classe A, deux sous classe A1 et A2.
    En variable globale, j'ai un tableau nommé T de type A.
    Dans la classe A il y a une méthode virtuelle XX() qui est redéfinit par A1 et A2.
    Ce que je souhaite faire c'est avoir dans T[1] une instance de A1 et dans T[2] une instance de A2. Et lorsque je fais T[1].XX() il effectue le traitement de XX() redéfinit dans A1, ect..


    Est-ce que c'est possible ?

    Pour le moment, ma solution est que j'ai une instance de type A et j'alloue (avec le mot clé allouer) une instance de type A1 ou A2.
    Mais ca ne fonctionne pas.
    (En effet, XX() ne sait pas quelle méthode choisir, celle de A1 ou A2.)


    J'espere avoir été le plus clair possible avec mes A A1 A2 XX ect...xD

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Je le pratique avec succès en V14 en suivant la même logique.

    Postez les codes utiles pour déceler une erreur éventuelle mais comme ça, ça me paraît bon.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Pour mon allocation ca se trouve ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gCDernier = allouer cOCoupures(SourisX, SourisY)
    gcDernier étant un CEquipElec.

    le tableau étant défini de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gCBaseEquipElec	est un tableau dynamique de 0 CEquipElec
    Lorsque j'ajoute dans le tableau je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableAjoute(gCBaseEquipElec,gCDernier)
    Lorsque je souhaite utiliser une méthode de la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    POUR TOUT ELEMENT pcloBaseParc DE gCBaseEquipElec
       pcloBaseParc:ChangeCouleur()
       pcloBaseParc:Dessine()
    FIN
    ChangeCouleur() est une méthode définit dans la super classe
    Dessine est une méthode définit dans la sous classe.

    En mode Débug je rentre dans ChangeCouleur mais pas dans Dessine.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Pour utiliser le polymorphisme, il faut déclarer un objet du type de la classe de base avec dynamique. Dans votre cas, ceci conviendrait mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gCBaseEquipElec	est un tableau de 0 CEquipElec dynamique
    Petite parenthèse, déclarer un "tableau dynamique de 0" est contradictoire. Soit vous définissez une dimension pour le tableau, soit vous mentionnez dynamique (je parle toujours de la dimension du tableau).

    Après ne me demandez pas pourquoi ça compile malgré cette contradiction dans les déclarations, sans commentaire...


    Autre détail, n'utilisez pas TableAjoute pour un tableau. Sauf erreur, c'est uniquement pour les champs table.

    Là aussi, Windev nous fait preuve de son excellente rigueur dans la gestion des types .

    Mes remarques sont valables en WD14, à vérifiez avec WD11.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour
    Citation Envoyé par Redg9 Voir le message
    comme le remarque le nom du topic, ma demande tourne autour de l'héritage.
    Ce que tu nous présentes ce n'est pas seulement l'héritage, c'est aussi la mise en oeuvre du polymorphisme.

    Et le polymorphisme en WLangage impose d'utiliser des objets dynamiques.

    Je remarque au passage que l'exécution de ton code en WD12 devrait déclencher une erreur fatale (apparemment pas de plantage en WD11 ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Il est impossible d'affecter un objet de classe cOCoupures dans un objet de classe CEquipElec.
    Proposition avec des objets dynamiques:
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    gCBaseEquipElec	est un tableau de 0 CEquipElec dynamique
    gcDernier est un CEquipElec dynamique
     
    gCDernier = allouer cOCoupures(SourisX, SourisY)
    TableauAjoute(gCBaseEquipElec,gCDernier)
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    pcloBaseParc est un CEquipElec dynamique
     
    POUR TOUT ELEMENT pcloBaseParc DE gCBaseEquipElec
       pcloBaseParc:ChangeCouleur()
       pcloBaseParc:Dessine()
    FIN

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    Pour TableAjoute() c'est une erreur de frappe. Mais merci pour vos commentaires !
    EDIT : @JBO : Pour votre proposition de code. C'est bien ce que j'ai effectué, même résultat.

    Le tableau contient une liste de CEquipElec. Non pas, des COCoupures ou autres. Ce qui fait que la méthode dessiner() ne se lance toujours pas

Discussions similaires

  1. Comment faire un splash screen pour son application?
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/04/2007, 14h28
  2. Iconiser son application
    Par lehic dans le forum Langage
    Réponses: 4
    Dernier message: 21/12/2005, 14h31
  3. Réponses: 20
    Dernier message: 06/12/2005, 15h19
  4. Protection de son application
    Par FFF dans le forum Sécurité
    Réponses: 14
    Dernier message: 22/11/2005, 14h55
  5. Comment protéger efficacement son application ?
    Par RamDevTeam dans le forum EDI
    Réponses: 3
    Dernier message: 15/11/2005, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo