Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1442 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Début en C++] Mon code est-il plus ou moins bon? :-S

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Début en C++] Mon code est-il plus ou moins bon? :-S

n°1291259
le_duc
PlaTyPuS
Posté le 24-01-2006 à 18:51:06  profilanswer
 

:hello:  
 
J'ai commencé C++ cet aprèm (enfin plus ou moins on dira...vu que ca fait 4mois que j'ai des cours là-dessus, mais que j'ai rien foutu  :pfff:  :non: ) et j'aimerais bien prendre les bon réflexes dès aujourd'hui :), alors si vous pouviez me dire ce qui joue pas dans mes classe, ca serait cool ;).
 
Développé sous C++ Builder 6:
 

Code :
  1. [Personne.h]
  2. class Personne
  3. {
  4.         int cptPersonne;
  5.         public:
  6.                 Personne();
  7.                 Personne(AnsiString nom, AnsiString prenom, int age);
  8.                 void Affiche();
  9.                 void AfficheTab();
  10.                 void SetNom(AnsiString nom);
  11.                 ~Personne();
  12.         protected:
  13.                 Personne* tab;
  14.                 AnsiString nom;
  15.                 AnsiString prenom;
  16.                 int age;
  17. };
  18. class Employe : public Personne
  19. {
  20.         public:
  21.                 Employe(AnsiString nom, AnsiString prenom, int age, double salaire);
  22.                 void Affiche();
  23.         protected:
  24.                 double salaire;
  25. };
  26. [Personne.cpp]
  27. Personne::Personne()
  28. {
  29.         Personne("unknown", "unknown", 0);
  30. }
  31. Personne::Personne(AnsiString nom, AnsiString prenom, int age)
  32. {
  33.         this->nom = nom;
  34.         //cout << this->nom;
  35.         this->prenom = prenom;
  36.         this->age = age;
  37.         ++this->cptPersonne;
  38. }
  39. void Personne::SetNom(AnsiString nom)
  40. {
  41.         this->nom = nom;
  42. }
  43. void Personne::Affiche()
  44. {
  45.      cout << "\n-----------------------------------\n";
  46.      cout << this->nom << " " << this->prenom;
  47.      cout << "\nAge: " << this->age;
  48. }
  49. void Personne::AfficheTab()
  50. {
  51. }
  52. Personne::~Personne()
  53. {
  54.         delete this->tab;
  55. }
  56. Employe::Employe(AnsiString nom, AnsiString prenom, int age, double salaire) : Personne(nom, prenom, age)
  57. {
  58.         this->salaire = salaire;
  59. }
  60. void Employe::Affiche()
  61. {
  62.         Personne::Affiche();
  63.         cout << "\nSalaire: " << this->salaire;
  64. }


 
En plus des erreurs de style, j'ai un bug... si je fais ca:
 

Code :
  1. Personne* p1 = new Personne();
  2.         Personne* p2 = new Personne("Maurice", "Jean", 24);
  3.         Employe* e1 = new Employe("Jeanne", "Darc", 22, 6666.00);
  4.         p1->Affiche();
  5.         e1->SetNom("Sumi" );
  6.         e1->Affiche();
  7.         p2->Affiche();


 
-> à l'affichage le p1 m'affiche des champs vide pour les variables de classe!!! pige vraiment pas! -> il devrait m'afficher "unknown unknown" et 0 pour l'age...
 
Merci pour votre aide!!
 
++


Message édité par le_duc le 24-01-2006 à 18:52:25
mood
Publicité
Posté le 24-01-2006 à 18:51:06  profilanswer
 

n°1291262
Sebou77
French Tech powaa :-)
Posté le 24-01-2006 à 18:52:52  profilanswer
 

Bon je suis pas très balaise en C++ mais le mieux ça serait que tu nous donne clairement les erreurs que tu obtients à la compilation :)

n°1291266
le_duc
PlaTyPuS
Posté le 24-01-2006 à 19:02:18  profilanswer
 

bah tout fonctionne à la compilation! et l'affichage également (sauf pour le p1 qui merde comme expliqué!)
 
mais c pas ca que j'aimerais savoir, c'est si le style est bon ou pas.... (genre si je devrais pas mettre des pointeurs à des endroit ou j'en ai pas mis!)

n°1291270
Sebou77
French Tech powaa :-)
Posté le 24-01-2006 à 19:10:15  profilanswer
 

Code :
  1. Personne::Personne()
  2. {
  3.        Personne("unknown", "unknown", 0);
  4. }


ça serait pas plutot :
 

Code :
  1. Personne::Personne()
  2. {
  3.        new Personne("unknown", "unknown", 0);
  4. }


J'était comme toi j'écoutais pas en cours, j'en ai pas fais depuis des mois alors je m'avance pas :D

n°1291275
le_duc
PlaTyPuS
Posté le 24-01-2006 à 19:14:36  profilanswer
 

j'ai test ca change à rien :D
 
ce qui est bizarre c'est que les "unknown" sont bien attribués (si j'enlève la ligne qui est en commentaire dans le constructeur, ca m'affiche "unknown" ), mais à l'affichage c pas digéré :D

n°1291279
Sebou77
French Tech powaa :-)
Posté le 24-01-2006 à 19:22:14  profilanswer
 

:heink:
Bon désolé je peut pas t'aider plus :'(

n°1291283
chrisbk
-
Posté le 24-01-2006 à 19:26:39  profilanswer
 

Code :
  1. Personne::Personne()
  2. {
  3.        Personne("unknown", "unknown", 0);
  4. }


 
heuh je suis clairement pas convaincu, la, jme demande si tu crée pas un objet Personne dans le vide. Set les valeurs a la main dans ce constructeur (ou fais une fonction pour ca)
 

n°1291294
le_duc
PlaTyPuS
Posté le 24-01-2006 à 19:45:53  profilanswer
 

ouais, mais pour setter les valeur je dois créer un objet... avant de pouvoir le faire! Donc je le ferais après le Personne("unknown", "unknown", 0); (car l'objet est crée, c'est sûr!) mais ca ferait carrément pas propre du tout je trouve :S
 
en java ca marche nickel en tout cas :D
 
enfin vais test

n°1291314
sankukai8
Posté le 24-01-2006 à 19:56:27  profilanswer
 

   

Code :
  1. Personne::Personne()
  2.        {
  3.             nom="unknown";
  4.             prenom="unknown";
  5.             age= 0;
  6.       }


n°1291323
le_duc
PlaTyPuS
Posté le 24-01-2006 à 20:06:31  profilanswer
 

bah oui... mais ca se répète avec le 2e constructeur... pas génial!
 
mais ca marche définitivement pas en appelant le 2e constructeur

mood
Publicité
Posté le 24-01-2006 à 20:06:31  profilanswer
 

n°1291326
++fab
victime du syndrome IH
Posté le 24-01-2006 à 20:07:53  profilanswer
 

le_duc a écrit :

ouais, mais pour setter les valeur je dois créer un objet...


Oui. Et dès que tu es entré dans le corp du constructeur, ton objet est déja crée, initialisé ou non ...
 

Citation :

Donc je le ferais après le Personne("unknown", "unknown", 0); (car l'objet est crée, c'est sûr!)


Non. Tu crées un temporaire, et tu ne t'en sers même pas.
 
 

n°1291342
++fab
victime du syndrome IH
Posté le 24-01-2006 à 20:14:38  profilanswer
 

sankukai8 a écrit :

Code :
  1. Personne::Personne()
  2.        {
  3.             nom="unknown";
  4.             prenom="unknown";
  5.             age= 0;
  6.       }



 
Au secour ! ( et encore c'est le plus beau constructeur de ce thread :o )
 

Code :
  1. Personne::Personne()
  2.     : nom( nom ), prenom( prenom ), age( age ) // tu peux mettre des noms différents
  3. {}


 

Code :
  1. Personne::Personne( std::string const& nom, std::string const& prenom, int age )
  2.     : nom( nom ), prenom( prenom ), age( age ) // tu peux mettre des noms différents
  3. {}


 
( J'ai utilisé std::string au lieu de AnsiString, elle n'est généralement pas assez mauvaise pour en utiliser une autre )

n°1291356
++fab
victime du syndrome IH
Posté le 24-01-2006 à 20:22:51  profilanswer
 

Quelques corrections en vrac :
 
 

Code :
  1. [Personne.h]
  2. class Personne
  3. {
  4.         static int cptPersonne; // si l'objectif est de compter les instances de Personne
  5.         public:
  6.                 Personne();
  7.                 Personne( std::string const& nom, std::string const& prenom, int age );
  8.                 virtual void Affiche() const;
  9.                 void AfficheTab(); // ?
  10.                 void SetNom(std::string const& nom);
  11.                 virtual ~Personne() {}
  12.         private:
  13.        
  14.                 std::string nom;
  15.                 std::string prenom;
  16.                 int age;
  17. };
  18. class Employe : public Personne
  19. {
  20.         public:
  21.                 Employe( std::string const& nom, std::string const& prenom, int age, double salaire );
  22.                 virtual void Affiche() const;
  23.         private:
  24.                 double salaire;
  25. };
  26. Employe::Employe(std::string const& nom, std::string const& prenom, int age, double salaire)
  27.     : Personne(nom, prenom, age),
  28.     salaire( salaire )
  29. {}

n°1291364
le_duc
PlaTyPuS
Posté le 24-01-2006 à 20:46:26  profilanswer
 

yes!!!
 
merci beaucoup ++fab! :jap:
 
vais appliquer tout ca et me renseigner sur les trucs que je capte pas genre les "&" :D ou le virtual :S
 
merci pour tes corrections.

n°1291379
le_duc
PlaTyPuS
Posté le 24-01-2006 à 20:59:36  profilanswer
 

donc je dois aussi ajouter  
 

Code :
  1. virtual void Affiche() const
  2. {
  3. }


 
pige pas trop ce "const" non plus...
 
(java c'est la rigolade à  coté de C++ :D)

n°1291382
chrisbk
-
Posté le 24-01-2006 à 21:01:14  profilanswer
 

c'est juste pour signifier que ta fonction ne modifiera pas ses membres. Ca sert si plus tard tu as :
 
 
const Personne * truc = ...
 
le compilo t'interdira de modifier une var membre de truc, et d'appeler toute fonction non const de Personne. Mettre des consts la ou nécessaire est (imho) une bonne habitude a prendre

n°1291395
le_duc
PlaTyPuS
Posté le 24-01-2006 à 21:07:21  profilanswer
 

okay, thx :jap:

n°1291409
le_duc
PlaTyPuS
Posté le 24-01-2006 à 21:32:37  profilanswer
 

pour Virtual j'ai touvé ca sur developpez.net:
 
"Le mot-clé virtual permet de supplanter une fonction membre d'une classe parent depuis une classe dérivée (à condition qu'elle ait la même signature)."
 
je me demande alors pourquoi j'ai besoin d'un virtual devant void Affiche() const; (de ma classe Personne).
 
Ca ne suffirait pas de mettre le virtual uniquement dans Affiche() de la classe Employe ??

n°1291418
chrisbk
-
Posté le 24-01-2006 à 21:39:25  profilanswer
 

nan justement, fo le specifier dans la classe pere

n°1291427
Taz
bisounours-codeur
Posté le 24-01-2006 à 21:42:59  profilanswer
 

et le destructeur virtuel ?

n°1291625
slash33
Posté le 25-01-2006 à 08:45:58  profilanswer
 

fab++, comment fait on pour récupérer le nom, prenom et age de la personne dans la classe Employe ?
 
cf ton message http://forum.hardware.fr/hardwaref [...] m#t1291356


Message édité par slash33 le 25-01-2006 à 08:48:07
n°1291633
le_duc
PlaTyPuS
Posté le 25-01-2006 à 09:29:03  profilanswer
 

bah tu fais des getter ;)
 

Code :
  1. AnsiString Personne::GetNom() const
  2. {
  3.         return this->nom;
  4. }


Message édité par le_duc le 25-01-2006 à 09:32:35
n°1291634
le_duc
PlaTyPuS
Posté le 25-01-2006 à 09:39:00  profilanswer
 

chrisbk a écrit :

nan justement, fo le specifier dans la classe pere


 
mais alors on peut enlever le "virtual" de  

Code :
  1. virtual void Affiche() const;


de la classe Employe!
 
non?

n°1291638
chrisbk
-
Posté le 25-01-2006 à 09:42:31  profilanswer
 

oui, tu peux. Mais en pratique ca fait pas de mal non plus et ca laisse courir l'info que Affiche est virtuelle

n°1291685
le_duc
PlaTyPuS
Posté le 25-01-2006 à 10:32:05  profilanswer
 

okayyy

n°1291686
le_duc
PlaTyPuS
Posté le 25-01-2006 à 10:32:34  profilanswer
 

qqn a une explication pour le "&" ?? je trouve pas


Message édité par le_duc le 25-01-2006 à 10:32:47
n°1291690
chrisbk
-
Posté le 25-01-2006 à 10:34:36  profilanswer
 

?
 
ca signifie soit que tu prends l'adresse d'une variable (si dans une expression), soit que ton type est une reference vers qqchose (en declaration de variable / parametre)
 
cf cours C++

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Début en C++] Mon code est-il plus ou moins bon? :-S

 

Sujets relatifs
[PHP] interdire du code dans un formulaire: strip_tags()Demande de conseil sur la methode la plus propre du code php ?
référence d'une partie d'un code dans une pageRetrouver le code source à partir d'un java .class ?
[VB6] aidez moi,qu'est ce qu'il cloche dans ce code[TOPIC UNIK] VBA et Excel 200x exemples de code
Transformation de code HTML en chaine[Résolu]Fonction Pos : mon code ne marche pas
Les meilleurs perfs pour Java : compilation code natif, -O, -server ?longueur max de code.Inet1.OpenURL ?
Plus de sujets relatifs à : [Début en C++] Mon code est-il plus ou moins bon? :-S


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR