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 :

Probleme avec la surdefinition des constructructeurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Par défaut Probleme avec la surdefinition des constructructeurs
    Bonjour;
    Je viens de me remtre au C/C++ apres une longue periodes de Java et Objective-C donc mes questions peuvent parraitre un peut stupide lol

    Je veux creer une classe qui surdefinie la pluspart des constructeurs (j'ai recreer le pb avec le grand classic de la classe point):

    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
     
    class Point {
     
    private:
        int x;
        int y;
        static int numberOfPoints;
     
    public:
        //Constructors
        Point();
        Point(int coordX,int coordY);
    ...
    }
     
    ================
    Point::Point(){
        cout << "Point::Point()" << endl;
        this->x = 0;
        this->y = 0; 
        numberOfPoints++;
        cout << "Numbers of Point Increasing = " << numberOfPoints;
    }
     
    Point::Point(int coordX,int coordY){
        cout << "Point::Point(int coordX,int coordY)" << endl;
        this->x = coordX;
        this->y = coordY;
    }
    ...
    tout fonctionne a merveille sauf pour l'incrementation de NumberOfPoints.
    ce que je veux faire c'est redefinir tout les constructeurs pour que quelquesoit la maniere dont le point est creer, la varaible soit incrementer.

    je pensais que en surdefinissant le constructeur par default sa ferais l'affaire mais aparament non.

    est ce qu'il existe une maniere de faire sa sans avoir a rajouter dans chaque constructeur Initialize();

    Merci d'avance pour votre aide

    Jason

  2. #2
    screetch
    Invité(e)
    Par défaut
    salut
    au lieu d'avoir un entier, mets une classe contenant un entier

    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
    41
    42
    43
    44
     
    class Counter
    {
        static int numberOfPoints;
        Counter();
        ~Counter();
        // copie aussi!! mais la, j'ai la flemme
    };
    class Point {
     
    private:
        int x;
        int y;
        Counter c;
    public:
        //Constructors
        Point();
        Point(int coordX,int coordY);
    ...
    }
     
    ================
    Counter::Counter()
    {
        numberOfPoints++;
        cout << "Numbers of Point Increasing = " << numberOfPoints;
    }
    Counter::~Counter()
    {
        numberOfPoints--;
    }
    ================
    Point::Point(){
        cout << "Point::Point()" << endl;
        this->x = 0;
        this->y = 0; 
    }
     
    Point::Point(int coordX,int coordY){
        cout << "Point::Point(int coordX,int coordY)" << endl;
        this->x = coordX;
        this->y = coordY;
    }
    ...
    [edit] ca manque un peu de détails

    quel que soit le constructeur choisi, les membres de type "T" sont toujours initialisés avec leur constructeur par défaut ou grace a un constructeur explicite, et le destructeur est appelé automatiquement. Ici on ce sert d'une des forces du C++, le fait que le compilateur nous aide a générer beaucoup de code sans effort, par exemple en appelant automatiquement des constructeurs ou destructeurs.

    Ici, en encapsulant le compteur dans une classe, cela permet de s'assurer grace au compilateur que le constructeur et le destructeur seront toujours appelé, et surtout, c'est automatique, il n'y a pas de code supplémentaire a ajouter.

    c'est une garantie du compilateur, c'est une des meilleures garanties qui existent (ne jamais faire confiance a un programmeur, si on peut a la place demander au compilateur de le faire)
    Dernière modification par screetch ; 21/09/2009 à 15h12. Motif: manque de détails

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Par défaut
    Merci screetch,
    j'avais pas penser a cette solution;
    cependant cela ne repond pas au problem que j'avais pose
    ou est-ce que j'appel mon ++ ou le compteur (celon l'implementation) pour que j'ai le mm traitement quelquesoit la maniere de construire mon objet.

    je voudrais eviter d'avoir a mettre dans chaque constructeur un appel a une fonction (ou d'un compteur)

  4. #4
    screetch
    Invité(e)
    Par défaut
    regarde le code que j'ai posté, il fait deja ca tout seul. c'est magique.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Il est pas super thread-safe ton code "screetch"

    Mais, c'est une bonne base.

  6. #6
    screetch
    Invité(e)
    Par défaut
    le code original non plus... moi on me pose une question j'y réponds, je fais pas le ménage ni la vaisselle.

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

Discussions similaires

  1. Probleme avec la barre des tâches !!
    Par SAMI B dans le forum Windows XP
    Réponses: 4
    Dernier message: 28/04/2006, 16h19
  2. [Javascript/Dhtml] Problemes avec la supression des formulai
    Par ETI-trian dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/03/2006, 20h49
  3. [Configuration] probleme avec le remplacement des accents
    Par xtaze dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 17/12/2005, 19h16
  4. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  5. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51

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