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

 Delphi Discussion :

Fonction virtual abstract et overload ?


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Points : 116
    Points
    116
    Par défaut Fonction virtual abstract et overload ?
    Bonjour,

    j'aurais besoin d'une petite précision :

    une fonction dans une classe peut elle etre virtual, abstract ET overload à la fois ?
    Si oui, y a t il un ordre "preferentiel" pour la declaration ?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par Targan Voir le message
    une fonction dans une classe peut elle etre virtual, abstract ET overload à la fois ?
    Non une méthode ne peut être abstract et overload à la fois. C'est d'ailleurs un non-sens, puisque la méthode n'est pas implémentée dans la classe.

    Qu'est-ce que tu veux faire exactement ?

    @+ Claudius

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Points : 116
    Points
    116
    Par défaut
    Je pensais que je pouvais faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    TMyClass = class
        protected
        ...
        public
            ...
            function GetUser( aID: integer): TUsers; virtual; abstract; overload;
            function GetUser( aLogin: string): TUsers; virtual; abstract; overload;
            ...
        end;
     
        TMyClassMy = class(TMyClass)
        private
            ...
        public
            constructor Create();
            destructor  Destroy;
            ...
            function GetUser( aID: integer): TUsers; override;
            function GetUser( aLogin: string): TUsers; override;        
            ...
        end;

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Points : 116
    Points
    116
    Par défaut
    une idee de comment faire ?

    Merci.

  5. #5
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    type
      TMaClasse = class
      protected
        procedure Test(const int: integer); overload; virtual; abstract;
        procedure Test(const str: string); overload; virtual; abstract;
      public
        procedure TestTest;
      end;
     
     
      TMaClassDesc = class(TMaClasse)
      protected
        procedure Test(const int: integer); override;
        procedure Test(const str: string); override;
      end;
     
     
    implementation
     
    { TMaClasse }
     
    procedure TMaClasse.TestTest;
    begin
      Test(4);
      Test('salut');
    end;
     
    { TMaClassDesc }
     
    procedure TMaClassDesc.Test(const int: integer);
    begin
      Showmessage(IntToStr(int));
    end;
     
    procedure TMaClassDesc.Test(const str: string);
    begin
      Showmessage(str);
    end;

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      with TMaClassDesc.Create do
        try
          TestTest;
        finally
          Free;
        end;

  6. #6
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut



    Non une méthode ne peut être abstract et overload à la fois. C'est d'ailleurs un non-sens, puisque la méthode n'est pas implémentée dans la classe.

    Qu'est-ce que tu veux faire exactement ?

    @+ Claudius
    Salut
    J'ai jamais essayé cette combinaison, mais ca me parait pas être un non sens, non ?
    définition de 2 méthodes identiques avec arguments différents, et seulement définies dans les classes filles ca peut être utile il me semble. ?

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par TicTacToe Voir le message
    définition de 2 méthodes identiques avec arguments différents, et seulement définies dans les classes filles ca peut être utile il me semble. ?
    Effectivement, je ne l'avais pas entendu dans ce sens. J'aurais du.

    Donc pour répondre à la question initiale de Targan:
    Citation Envoyé par Targan Voir le message
    Si oui, y a t il un ordre "preferentiel" pour la declaration ?
    L'ordre est effectivement: overload, virtual et abstract.
    En précisant overload en dernier, comme je viens de le faire, le compilateur le rejette.

    @+ Claudius

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Points : 116
    Points
    116
    Par défaut
    Oui tout fonctionne bien qd on met le bon ordre.

    Merci à vous tous pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/11/2012, 10h45
  2. Fonction virtual en c++
    Par Palvors dans le forum C++
    Réponses: 2
    Dernier message: 24/10/2006, 10h17
  3. overload ou virtual??
    Par elekis dans le forum C++
    Réponses: 4
    Dernier message: 06/04/2006, 09h19
  4. [C#] Différences entre Virtual et Abstract
    Par kunfuka dans le forum C#
    Réponses: 2
    Dernier message: 11/11/2005, 12h14
  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