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

C++ Discussion :

overload ou virtual??


Sujet :

C++

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut overload ou virtual??
    bonjour, je suis tomber sur le dilemme suivant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class A{
       fonction1(){ truc lent et compliqué };
      public:
      fonction2(){fonction1()}
     
    };
     
    class B : public A{
       fonction1() {;}
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class A{
       virtual fonction1(){ truc lent et compliqué };
      public:
      fonction2(){fonction1()}
     
    };
     
    class B : public A{
       fonction1() {;}
    }

    en fait, j'aurais voulu savoir si il y a une difference entre ces deux truc??
    Mon probleme est que j'ai une fonction2 qui fait qqch d'hyper lent dans la classe A ainsi qu'un fonctio1 appartenant a la A qui l'appelle.

    je construit mon objet B, mais j'aimerais que la fonction lente soit surchargé pour en rien faire (car dans se cas precis, je n'ai pas besoin qu'elle fasse le long truc et complique)

    quelle est la meilleur chose??


    merci

    a+++

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 178
    Points : 201
    Points
    201
    Par défaut
    J'ai pas tout compris a ton problème mais si tu veux surcharger une fonction il faut qu'elle soit déclarée virtual.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    A priori, si tu as dans la classe de base un truc qui ne sert à rien dans un dérivé, j'ai peur qu'il y ait un problème de design de classe. Est-tu sur par exemple de ne pas pouvoir faire dériver A et B d'une classe commune, plutôt que d'avoir B dérivant de A ?

    Sinon, pour ton problème, dans ton premier cas, si tu appelles directement la fonction f1 sur un objet de type statique B (c'est à dire pas un A* pointant sur un B, mais un B pur et dur) c'est effectivement la fonction ne faisant rien qui sera appelée. Sinon, c'est la fonction longue.

    Dans ton deuxième cas, si le type dynamique est B, même si le type statique correspond à A, c'est bien ta redéfinition qui sera appelée.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Points : 189
    Points
    189
    Par défaut
    en fait, c'est un moteur 2D que j'ai fait. le moteur est fait pour plusieurs jeu qui fonctionne bien.

    mais on m'a demandé de faire un tetris, et donc, je n'ai pas besoin de faire update all, et autre truc qui sont des fonctions bien couteuses. c'est pour cela que j'aimerais bien surchargé le tout pour que c'est fonctions ne fasse rien (plutot que de tout reecrire)

    mais je pense que je vais mettre en virtual car effectivement, je fait A* = new B

    merci..

    a++

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Avec un virtual, ça marchera bien. Mais il est vrai qu'il vaudrait mieux alors découpler ton design, faire une classe A qui contienne l'implémentation de la fonction1 et une classe mère qui ne fasse qu'appeler la fonction1, déclarée en virtual, à partir de la fonction2. Ta classe mère n'aura alors qu'une seule utilité : faire interface.
    Si je ne me trompe pas, c'est le pattern stratégie.

    Et comme d'habitude donc, +1 avec JolyLoic

Discussions similaires

  1. Fonction virtual abstract et overload ?
    Par Targan dans le forum Débuter
    Réponses: 7
    Dernier message: 08/02/2008, 17h10
  2. Déclenchement Programme sur Virtual Key
    Par Tom-G dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 09/05/2003, 12h58
  3. Overload
    Par JMF dans le forum Langage
    Réponses: 8
    Dernier message: 18/04/2003, 09h19
  4. Virtual-key code
    Par lyrau dans le forum Windows
    Réponses: 2
    Dernier message: 29/03/2003, 19h22
  5. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2002, 17h50

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