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

Langage C++ Discussion :

Argument et classe Générique


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut Argument et classe Générique
    bonjour et merci de prendre quelques secondes pour m'aider

    voilà ma première question :
    quels sont les avantages et les inconvénients du passage par valeur, par adresse et par références?
    ps : est-ce qu'il serait possible de mettre un exemple de chaque pour que je vois facilement.

    Merci .

    2 question :

    Je dois créer une classe générique qui contient un tableau statique de 5 éléments de type quelcnque
    Comment dois je m'y prendre ?

    Merci

  2. #2
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    donc ça donnera :
    pour la classe générique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    template <class T> class Ensemble {
    T *tab=new T[5];
    };
    ?? oui ou non ? merci

  4. #4
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    template <typename T> class Ensemble 
    {
    public:
        // mettre ici les méthodes publiques
     
    private:
       T tab[5];
    };
    Bien que "template <class T>" soit correct il vaut mieux utiliser le mot clé typename.

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par jmv Voir le message
    Bien que "template <class T>" soit correct il vaut mieux utiliser le mot clé typename.
    C'est faux. Ca ne change strictement rien.
    Toutefois, mettre typename indique à ceux qui liront le code que le paramètre peut a priori être un type fondamental aussi bien qu'un type créé par l'utilisateur ; alors que mettre class indique que le paramètre template sera a priori un type créé par l'utilisateur. Mais ça ne change strictement rien, le compilateur s'en fout.

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par Klaine Voir le message
    Je dois créer une classe générique qui contient un tableau statique de 5 éléments de type quelcnque
    Comment dois je m'y prendre ?

    Merci
    Ce que tu veux faire existe déjà : Boost.Array. Si c'est un exercice, ok refais-le.

    boost::array fais ce que tu veux, sauf que l'on paramètre aussi la classe avec le nombre d'éléments que contiendra le tableau statique. De plus, son interface est compatible avec les algorithmes de la bibliothèque standard (tu peux appeler std::sort, std::foreach etc. dessus).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    encore une question ,ça veut dire quoi surcharger l'opérateur << ?

    surcharger ++, --, ==, ok ça je comprend mais <<,je ne vois pas ce que c'est

    Ex si je fais ça , est-ce que c'est bon :
    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
     
    Class Ensemble{
     
    int x;
    public :
     Ensemble operator << (Ensemble);
    };
     
    // car la surcharge doit afficher la valeur de l'ensemble
    Ensemble Ensemble :: operator << (Ensemble Z)
    {
    std :: cout << Z.x;
    // return this
    return *this;
    }

    Merci

  8. #8
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    La réponse est dans la
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Par défaut
    Salut,

    Juste une chose, c'est à mon avis une bonne habitude à prendre que de ne pas implémenter les méthodes de surchage d'opérateur en temps que méthodes de classe, mais en temps que fonctions amies. Sinon, tu peux tomber sur des problèmes du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class MyInt{
    private :
                int _i;
    public:
                MyInt(int i=0);
                MyInt operator+(MyInt& j);
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MyInt::operator+(int j){
       MyInt tmp;
       tmp._i= this->_i + j;
       return tmp;
    };
    utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MyInt myInt(20);
    myInt = myInt+10; //ok
    myInt = 10+myInt; //ko l operateur + n'est pas surdéfini pour le type de base "int"
    Alors qu'en ayant déclarer la(les) méthodes de surchage comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    friend MyInt operator+(MyInt& i, int j);
    friend MyInt operator+(int j, MyInt& i);
    Le problème ne se pose pas ...

  10. #10
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Soit en ami soit en définissant tous les accesseurs nécessaires

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 53
    Par défaut
    j'y ai pensé mais il faut bien sur que je sois capable de le faire sans les fonctions amies , vu qu'une fonction amie possède les mêmes privilèges d'accès qu'une méthode
    avec les fonctions mies , ils faut tout définir

    voilà par contre comment je fais pour faire qu'il m'affiche Z.x vu qu'il me dit qu'il est privé
    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
    #include<iostream>
     
    class Ensemble{
    int x;
    public :
    Ensemble (int);
    friend std::ostream& operator <<(std::ostream& Stream, const Ensemble); 
    };
     
    Ensemble :: Ensemble(int valeur)
    {
     x=valeur;
    }
     
     
    std::ostream& operator <<(std::ostream& Stream, const Ensemble & Z) 
    { 
        return Stream << Z.x; 
    }
     
    int main()
    {
        Ensemble E1(5);
        printf("avec surcharge operator <<:\n");
    }

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Par défaut
    Soit en ami soit en définissant tous les accesseurs nécessaires
    Vrai, mais le problème est que tu ne peux pas tout le temps définir ces accesseurs, principalement dans deux cas:
    Un des acteurs de la surcharge est un type de base (difficile de surdéfinir l'opérateur + pour un float)
    On a pas accès au code source -ou on ne veut pas le modifier- d'un des acteurs de la surchage ...

    ++

Discussions similaires

  1. [C# 2.0] Un exemple de classe générique qui ne compile pas.
    Par Pierre8r dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h11
  2. Réponses: 4
    Dernier message: 20/11/2005, 05h48
  3. [C#][ADO] Classe Générique ADO
    Par tscoops dans le forum Accès aux données
    Réponses: 2
    Dernier message: 15/11/2005, 14h21
  4. register_shutdown_function : Argument de classe
    Par JiJiJaco dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2005, 18h29
  5. [Generics] Classe générique
    Par norkius dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 15h57

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