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 :

surcharge de paramétre du constructeur


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    employé
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : employé
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 14
    Points
    14
    Par défaut surcharge de paramétre du constructeur
    bonjour,

    je souhaiterai savoir si il est correcte d' utliser une structure vide comme parametre afin de sucharger les constructeurs de la class
    et pouvoir créer des instances de cette classe en fonction des besoins

    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
     
    #ifndef A_H_INCLUDED
    #define A_H_INCLUDED
    #include <iostream>
    struct employer {
    };
     
    struct restaurant {
    };
     
     
    class A
    {
    public:
       A(employer essai);
       A(restaurant machin);
     
    private:
     
    };
     
    #endif // A_H_INCLUDED
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include "a.h"
    using namespace std;
     
    A::A(employer essai)
    {
        cout << "je suis un employer\n";
    }
     
    A::A(restaurant machin)
    {
        cout << "c'est un restaurant\n";
    }
    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
     
    #include <iostream>
    #include "A.h"
     
    using namespace std;
     
     
     
    int main()
    {
        restaurant resto;
        A machin(resto);
     
        employer david;
        A bidul(david);
     
        return 0;
     
    }
    j'espère avoir été assez clair
    merci d'avance pour vos conseils

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    De manière générale, oui, tu peux parfaitement utiliser une structure vide (que l'on appellera généralement "tag" pour l'occasion) et l'utiliser comme paramètre dans un constructeur (ou, de manière générale, n'importe quelle fonction) et, oui, chaque structure vide correspond à un type de donnée spécifique (à moins que tu n'utilise un alias de type, comme struct Tag1{}; using Tag2 = Tag1 : Tag2 et Tag1 seront alors tous les deux identifiés de la même manière )

    Cependant, l'utilisation de tags est plus souvent utilisée dans un contexte de programmation générique, sous une forme qui pourrait être proche de
    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
    struct Restaurant{};
    struct Employer{};
    template <typename TAG>
    class A{
    /* .. du contenu ici */
    };
    /* eventuellement, nous pouvons même fournir des spécialisations partielles ou totales en fonction du tag utilisé */
    template <>
    class A<Restaurant>{
        /* du contenu qui serait spécifique à un restaurant */
    };
    int main(){
       A<Restaurant> aRest; // une instnance de A spéifique à un restaurant
       A<Employer> aEmpl; // et une autre spécifique à un employeur "sans distinction"
       /* ... */
    }
    NOTA : A<Restaurant> et A<Employer> sont alors deux types totalement distincts, qui, si aucune spécialisation partielle (ou totale) n'est utilisées, se contenteront d'exposer la même interface publique. Mais il serait impossible (à moins de faire dériver A d'une classe de base non template) de mettre des A<Restaurant> et des A<Employer> dans une même collection d'objets

    NOTA: il est même tout à fait possible de faire en sorte que les spécialisations (partielles ou totales) de A n'exposent absolument pas les mêmes fonctions publiques, bien que l'on perde alors tout l'intérêt de travailler avec une classe template

  3. #3
    Membre à l'essai
    Homme Profil pro
    employé
    Inscrit en
    Juin 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : employé
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    merci encore pour ta réponse aussi rapide

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/05/2010, 14h00
  2. Paramètres de constructeur et MXML
    Par tafkap dans le forum Flex
    Réponses: 13
    Dernier message: 23/11/2009, 09h14
  3. info sur les paramètres de constructeur
    Par guiyomh dans le forum C++
    Réponses: 5
    Dernier message: 24/06/2008, 19h38
  4. 2d paramètre du constructeur de wxFrame
    Par Mersenne dans le forum wxWidgets
    Réponses: 5
    Dernier message: 04/06/2007, 17h55
  5. [AS2] passer paramètre à un constructeur par attachMovie()
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 06/08/2005, 02h32

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