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 :

Je débute en C++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut Je débute en C++
    Bonjour

    Je commence des exercices simples en programmation mais je suis un peu perdu, j'aurais besoin de votre aide pour commencer


    Construire une class Animal qui a pour attribut une chaine de 10 caracteres et un integer age
    La class Animal a 3 constructeurs ayant pour parametre respectif
    - un pointeur animal
    - un entier
    - une reference animal

    La class Animal a pour fonction membre Affiche qui affiche ses attributs
    et une fonction membre initage
    qui prend un parametre entier pour mettre à jour l'age de l'animal
    Faire une fonction Main qui utilise toutes les fonctions définies avec les objets
    suivants :
    Animal *A;
    Animal An;




    Une proposition de code:

    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
    class animal
    {private: // A ne pas oublier! POO=encapsulation=>il faut préciser si c'est du public, private, protected.
    int m_age;
    char nom[11];//Ca devrait aller pour la chaine de caractère nom... ?
     
    public: // A ne pas oublier! POO=encapsulation=>il faut préciser si c'est du public, private, protected.
     
    //Les constructeurs:
    animal(int);
    animal(*animal);
    animal(&animal);
    //Les autres méthodes:
    void affiche(animal);
    void initage(animal);
    //Le destructeur: optionnel ici?};
     
    //Les méthodes ??:calim2:

    Je n'ai pas encore fait beaucoup de C++, donc sous réserves d'erreurs ^^" !

  2. #2
    Membre confirmé Avatar de buse974
    Homme Profil pro
    Développeur / Chef de projet informatique
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur / Chef de projet informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Par défaut
    Salut.

    Donc ca a l'aire plutot bien pour le header a premiere vu, quelque petite chose tout de meme
    j'ai mis des commentaires
    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
     
    class animal
    {
     
    private: 
     
    int m_age;
    char nom[11];
     
     
    public:
     
    //Les constructeurs:
    animal(int age);
    animal(animal *animal); // ici il faut préciser le type de animal qui et animal
    animal(animal &animal); // pareil qu'en haut.
    //Les autres méthodes:
    void affiche(); // pas besoin de parametre tu ira chercher dans ta methode les atributs qui vont bien 
    void initage(int age); // on attend ici dans ton accesseur un entier donc INT 
     
    };
    voila pour ton header reste a définir tes methodes.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Et bien commençons par te souhaiter un bon courage dans ton apprentissage
    Tu m'as l'air bien parti. Juste quelques remarques :
    -> * ou & se mettent après le type et non avant. Ainsi, tes constructeurs devraient se déclarer comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    animal(animal*);
    animal(animal&);
    Si l'objectif d'un constructeur avec une référence est de faire un constructeur de copie, alors il faut que la référence soit constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    animal(animal const &);
    Ton exercice spécifie que initage prend en argument un entier. Et toi tu lui passes un animal. D'abord, il faut savoir que l'objet sur lequel s'applique la fonction n'a pas besoin d'être passé en argument. Il est implicite lors de l'appel. Tu ne dois que fournir les autres paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class animal
    {//[...]
    void initage(int);
    };
     
    int main()
    {
    animal un_animal;
    un_animal.initage(5);
    }
    Enfin, à moins que ce ne soit explicitement spécifié par ton prof, tu devrais utiliser std::string pour les chaînes de caractères et non un tableau de char de taille constante.

    Enfin, n'hésites pas à consulter les cours et la F.A.Q. pour t'aider à démarrer dans ton apprentissage.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    sans lire vos messages, j'ai travaillé sur le code je vous donne donc le code et je regarde votre travail, en vous remerciant..

    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
    45
    46
    47
    48
    49
    50
    51
    52
    class animal 
    {
      private : 
     
    int m_age; 
    char nom[11];
     
    public : 
     
    //Les constructeurs 
     
    animal(int); 
    animal(int , char[]);   // 
    animal(animal &); 
     
    //Les autres méthodes
     
    void affiche();   // 
    void initage(int ); 
     
    };
     
     
    // definition des constructeurs
    animal::animal(int a)
     {
        m_age = a ;
        nom[0] = '\0';
     }
     
    animal::animal(int a,char name[])
      {
          m_age = a ;
          strcpy(nom,name);
      }
     
    animal::animal(animal & anim)
      {
        m_age = anim.m_age;
        strcpy(nom,anim.nom);
      }
     
    void animal::affiche()
       {
          cout << "le nom : " << nom << endl ;
          cout << "l'age : " << m_age << endl ;
       } 
     
    void animal::initage(int a)
      {
         m_age = a; 
      }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    Voila la 2eme partie, c'est une notion d'heritage mais ça reste confus pour moi

    Soit la class domestique qui derive de animal et qui a un attribut identifiant entier
    Domestique a un constructeur qui a pour parametre deux entiers et une fonction membre affiche
    qui affiche ses parametres
    Faire une fonction main utilisant l'ensemble de ses fonctions Membre
    avec Domestique D;
    Domestique *Dm;

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    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 domestique
    {
    public :
     
    Animal*animal;
    domestique (Animal*A)
     
    Domestique : : domestique (int a, int b)
     
    void domestique : : affiche()
    {
    cout<<"le nom:"<<nom<<endl;
    cout<<"l'age:"<<m-age<<endl;

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    Bonjour

    J'aimerai connaitre votre avis sur ma soluce
    n'ayant pas de réponse, je crains que le code ne soit pas vraiment comment dire, dans l'esprit du c++
    un petit coup de main me mettra sur les rails.merci d'avance

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Ton premier ami est le compilateur.
    Le code que tu proposes ne compile même pas.
    Commences déjà par l'arranger pour qu'il compile. Si éventuellement tu n'arrives pas à obtenir un code compilable, alors isoles ton problème et pose une question précise.
    A moins que tu aies eu un problème de copier/coller, le code que tu as proposé montre que tu devrais d'abord replonger dans les cours Qu'est-ce qui s'est passé entre la classe animal et la classe domestique ? T'as perdu ton bouquin

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    autre essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Class domestique : public animal
    {
    public
     
    int
     
    domestique (int a, int b)
     
    void affiche ();
    void int ;

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Et ça compile ?
    Pour la syntaxe de l'héritage, c'est un début. Mais qu'est-ce donc ce constructeur ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    bon après avoir transpiré, voila le code, merci de me mettre au boulot
    et de ne pas me faire de cadeau

    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
    class domestique : public animal
    {
        int id; // idnetifiant de la classe
        public :
        domestique(int,int); // constructeur de la classe !!
        void affiche();    
    };
     
    domestique::domestique(int age,int identif)  :animal(age)  
    // ici il faut spécifier quel constructeur de la classe
    //  de base (la classe animal) appeler 
     
    {
    // ici je suppose que le 1er c'est l'age 
    // et l'autre c'est l'indentifiant.
     
        id = identif;
    }
     
    void domestique::affiche()
    {

  12. #12
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Mactor Voir le message
    bon après avoir transpiré, voila le code, merci de me mettre au boulot
    et de ne pas me faire de cadeau
    Ca ressemble déjà un peu plus à quelque chose...
    Commentaire en rouge :
    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
    class domestique : public animal
    {
        private : // Personnellement, je préfère mettre explicitement la portée. 
        int id; // idnetifiant de la classe
        public :
    // Je lis plus souvent les déclarations de classes 
    //que leur implémentation. Alors si le premier argument 
    //doit être l'age et le second l'identifiant, autant 
    //que cela saute au yeux ici.
        domestique(int age_,int identifiant_); // constructeur de la classe !!
        void affiche() const;  
    //voir F.A.Q. Pourquoi certaines fonctions membres possèdent le mot clé const après leur nom ?  
    };
    
    domestique::domestique(int age,int identif) 
       :animal(age)  ,identifiant(identif)
    //2 questions de la F.A.Q. : 
    // -> Mes constructeurs doivent-ils utiliser les listes d'initialisation ou l'affectation ?  
    // -> et Dans quel ordre sont construits les différents composants d'une classe ?
    // ici il faut spécifier quel constructeur de la classe
    //  de base (la classe animal) appeler 
    
    {
    }
    
    void domestique::affiche()const
    { // manque la fin ?

  13. #13
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Mactor Voir le message
    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
    class animal
    {
    private:
        int m_age;
        char nom[11];//Ca devrait aller pour la chaine de caractère nom... ?
     
    // ...
     
    // definition des constructeurs
    animal::animal(int a)
     {
        m_age = a ;
        nom[0] = '\0';
     }
     
    animal::animal(int a,char name[])
      {
          m_age = a ;
          strcpy(nom,name);
      }
    Les chaines de caractères, c'est assez complexe. Ton code pose de nombreux problèmes (taille, affectation, recopie) qui sont tous résolus si tu utilises std::string à la place de char* :
    http://cpp.developpez.com/faq/cpp/in...p?page=strings

Discussions similaires

  1. Divers problèmes d'affichages ! je débute..
    Par X-Files dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 20/12/2005, 23h51
  2. [DOM] Problème XML (je débute désolé....)
    Par canonbis dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 23/03/2005, 13h43
  3. Réponses: 2
    Dernier message: 10/12/2004, 15h52

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