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 �clair�

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    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 exp�riment�
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    178
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 178
    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 : 51
    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
    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 �clair�

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    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 : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    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