Rechercher : dans
Par :

C++ pointeur, constructeur, attributs

Dernière réponse le 5 oct 2009 à 17:15:10 Mactor, le 3 jui 2009 à 20:02:56 
 Signaler ce message aux modérateurs

Bonjour,

Voilà je commence en c++ et les notions ne sont pas encore tres claires, j'aurais besoin de votre aide....

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 a 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;

Ma soluce..beuk

#include <string>
class animal
{
int age;
adr-deb=newchar [10];

Class Animal
{
* Animal....

voila c'est un début mais bon.. :(

Configuration: Windows XP
Firefox 3.0.11

Meilleures réponses pour « C++ pointeur, constructeur, attributs » dans :
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Les files en langage C VoirLes files - Premier Entré Premier Sorti Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la file IV. Opérations sur les files A. Initialisation B. Insertion d'un élément dans la file C. Oter un...
Les constructeurs et les destructeurs en langage C++ VoirLa notion de constructeur Le constructeur est la fonction membre appelée automatiquement lors de la création d'un objet (en statique ou en dynamique). Cette fonction membre est la première fonction membre à être exécutée, il s'agit donc d'une...
Les pointeurs en langage C VoirDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des...

1

Mactor, le 28 sep 2009 à 21:51:06

J'ai cherché un peu plus, qu'en pensez vous ?

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: il reste à écrire ce qu'elles font... Et les appeler dans le main.


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

Répondre à Mactor

2

watou, le 29 sep 2009 à 00:17:29

Je vais essayer de t'aider !!

class animal 
{
  private : // tu n'es pas oblige de le priciser  
// quand tu declare ta classe avec "class" par defaut c private
//par contre si tu la declare struct , par default c public !!!

int m_age; 
char nom[11];

public : // c oblige !!

//Les constructeurs 

animal(int); 
animal(int , char[]);   // il vaut mieux comme ca !! :)
animal(animal &); 

//Les autres méthodes

void affiche();   // tu n'est oblige de transmettre un type animal !!
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; 
  }


et voici un petit exemple !! :
    animal chat(5);
    animal chat1(7,"minouche");
    animal chat2(chat1);
    chat.affiche();
    chat.initage(8);    
    chat.affiche();
    chat1.affiche();
    chat2.affiche();

Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire.

Répondre à watou

3

Mactor, le 29 sep 2009 à 08:54:31

Je te remercie pour ta réponse, je vais l'étudier de près et voir mes erreurs.
merci de m'apporter ton aide, je débute et cela m'aide à progresser
j'ai aussi la 2eme partie et je t'en ferais part

Répondre à Mactor

4

Nabla's, le 29 sep 2009 à 14:14:05

Animal::animal(int a,char name[])
{
m_age = a ;
strcpy(nom,name);
}


que ce passe - t - il si tu asses une chaine trop longue? => buffer overflow (enfin, ca marchera, jusqu'au jour ou ca marcehra pas)

je te conseille donc de vérifier la taille de la chaine avec un strlen avant de faire la copie ...

Répondre à Nabla's

5

Mactor, le 29 sep 2009 à 21:38:05

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;

Répondre à Mactor

6

loupius, le 29 sep 2009 à 22:47:16

Pour moi c'est la question qui est confuse... et ce n'est rien de le dire ! ;-)
D'une manière générale, je vous en prie, faites un effort dans l'exposé de votre problème. Ayez au moins la délicatesse de relire votre question !!!
Bonne soirée.

Répondre à loupius

7

Nabla's, le 30 sep 2009 à 09:31:21

Tu sais, on ne vas pas non plus te faire tes exos, on peux te donenr un coup de main, corriger, dire ce qui va pas, mais on ne fait pas les exo ici ..

dis nous ce qui pose problème, montres ce que tu as essayé de faire, et on verra

Répondre à Nabla's

8

Mactor, le 30 sep 2009 à 17:11:01

Merci Nabla's mais je ne suis pas dans cette logique.
Je vais faire cette 2ème partie

Répondre à Mactor

9

Nabla's, le 30 sep 2009 à 17:15:12

Essayes de faire quelque chose, au moins de dire comment tu comptes t'y prendre, ce que t'as comprit de l'exo (bref, montrer que tu attends pas de réponses toutes prêtes) et je t'aiderai avec plaisir (regardes, plus haut je t'ai déja fait une remarque constructive sur un bug que tu pourrais avoir)

Répondre à Nabla's

10

Mactor, le 1 oct 2009 à 18:28:36

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;

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;

Répondre à Mactor

11

Nabla's, le 1 oct 2009 à 18:42:31

Pour faire ton héritage, c'est comme ca:
class domestique : public animal
{
...

}

Répondre à Nabla's

12

Mactor, le 1 oct 2009 à 18:56:34

Class domestique : public animal // ok je commence par la et ensuite je poursuis avec le code

est ce que la suite est ok ?

Répondre à Mactor

13

Mactor, le 2 oct 2009 à 15:41:49

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

Répondre à Mactor

14

Nabla's, le 2 oct 2009 à 15:45:02

La suite a pas l'air fausse, mise à part le m-age que tu as déclarré comme étant m_age plus haut ...

Répondre à Nabla's

15

Mactor, le 2 oct 2009 à 20:35:42

Class domestique : public animal
{
public

int

domestique (int a, int b)

void affiche ();
void int ;

Répondre à Mactor

16

watou, le 2 oct 2009 à 23:39:52

Désolé pour le retard.
j'ai essayer de repondre à l'enoncé :

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()
{
     animal::affiche(); // pour acceder a la fonction affiche de la classe animal
     /* si tu fais :
     cout << nom ; 
     cout << m_age;
     c'est faut ! parceque tu ne peux pas acceder aux membre déclarés private dans ta 
     classe de base !! 
     nom et m_age ne sont par defaut private.
     */
     cout << "l'indentifiant : " << id << endl; 	 
}
 


un exemple sur tout ça :
  domestique a(45,52);
  a.affiche();

ps : suite du premier code . Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire.

Répondre à watou

17

 Mactor, le 5 oct 2009 à 17:15:10

Merci beaucoup, cela m'aide énormément...
je travaille sur cette base, et grace à toi je progresse

1000 fois merci ! ! !

Répondre à Mactor