begin process at 2012 05 30 02:41:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Juste une vérification


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Juste une vérification

jeudi 6 mai 2004 à 18:10:59 | Juste une vérification

popi0016

Bonjour à tous. Je suis autodidacte dans la développement C++ et C, et mon niveau d'apprentissage se situe à la création d'objets (forme canonique d'une classe, surdéfinition et spécialisation des opérateurs et des méthodes, dérivartion ou héritage multiples, fonctions virtuelles, définition des patrons et un peu les espace de nommages...) que je "maîtrise" mais pour evoluer et abandonner les pointeurs "traditionnels" j'attaque donc les conteneur et pour m'instruire je suis les instructions d'un TP de l'UFR de math et info proposé sur le NET qui invite l'utilisateur à créer un conteneur d'instance Stade puis des classes dérivées : Joueur, Ballon ect...

avant de continuer mes "exercixes" je voudrais savoir si le code suivant est correct :

MAIN :

//---------------------------------------------------------------------------
#include "stade.h"
//---------------------------------------------------------------------------
void main(
{
Stade *s = new Stade() ;
s->main();
delete s ;
}
//---------------------------------------------------------------------------

Déclaration et définition de Stade :

//---------------------------------------------------------------------------
#ifndef STADE_H
#define STADE_H

#include "joueur.h"

class Stade
{
public :
void main();
};

#endif
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
#include "stade.h"
// - Début main() -----------------------------------------------------------
void Stade :: main()
{
Joueur :: instances = new vector<Joueur*>() ;
Joueur *j = Joueur :: creer_une_instance();
delete j ;
}
// - Fin main() -------------------------------------------------------------

Déclaration et définition de Joueur :

//---------------------------------------------------------------------------
#ifndef JOUEUR_H
#define JOUEUR_H
#include <iostream>
#include <string>
#include <vector>
using namespace std ;

class Joueur
{ // attributs privés
int age ;
string nom ;
public :
// méthodes publiques
Joueur(string, int) ; // constructeur
static void lire_nom(string &) ; // saisie du nom
static void lire_age(int &) ; // saisie de l'âge
void imprimer() ; // imprime les attributs
static Joueur * creer_une_instance() ; // créer une instance Joueur
static vector<Joueur*> *instances ; // les instances Joueur
static void imprimer_instances() ; // imprime les instances
~Joueur() ; // destructeur
};

#endif
//---------------------------------------------------------------------------

#include "joueur.h"

// - Début Joueur() "constructeur" ------------------------------------------
Joueur :: Joueur(string s, int a)
{
instances->insert(instances->begin(), this);
nom = s ;
age = a ;
}
// - Fin Joueur() "constructeur" --------------------------------------------

// - Début lire_nom(string &) -----------------------------------------------
void Joueur :: lire_nom(string &s)
{
cin >> s;
}
// - Fin lire_nom(string &) -------------------------------------------------

// - Début lire_âge(int &) --------------------------------------------------
void Joueur :: lire_age(int &a)
{
cin >> a;
}
// - Fin lire_âge(int &) ----------------------------------------------------

// - Début imprimer() -------------------------------------------------------
void Joueur :: imprimer()
{
cout << "Nom : " << nom << endl ;
cout << "Age : " << age << endl ;
}
// - Fin imprimer() ---------------------------------------------------------

// - Début creer_une_instance() ---------------------------------------------
Joueur * Joueur :: creer_une_instance()
{
string s ;
int a ;
cout << "s = " ;
Joueur :: lire_nom(s) ;
cout << "a = " ;
Joueur :: lire_age(a) ;
Joueur *j = new Joueur(s, a) ;
cout << "Joueur cree a l'adresse " << j << endl ;
j->imprimer() ;
return j ;
}
// - Fin creer_une_instance() -----------------------------------------------

// - Définition du pointeur instances ---------------------------------------
vector<Joueur*> *Joueur :: instances ;
// --------------------------------------------------------------------------

// - Début ~Joueur() "destructeur" ------------------------------------------
Joueur :: ~Joueur()
{
for(vector<Joueur*> :: iterator b=instances->begin() ;
b!=instances->end() ; b++)
if(this == *b)
{
instances->erase(b) ;
break ;
}
}
// - Fin ~Joueur() "destructeur" --------------------------------------------

voila donc ce code et je voudrai savoir où faut-il supprimer de l'espace dynamique le pointeur j* ? allouer dans la fonction "creer_une_instance()" et quand le destructeur de "Joueur" est il appele car lorsque j'éxecute le prog. pas à pas il n'est jamais appelé malgré son activation ? par contre (et c'est logique) si je supprime j en sortie de "main" il est bien appele mais je perds ma dérivée de Stade dans ce cas, non ??? que faire SVP, mille merci d'avance : )) popi0016
jeudi 6 mai 2004 à 20:39:13 | Re : Juste une vérification

djl


si tu fait
if(this == *b)

alors tu devrai faire
instances->erase(*b) ;

mais la solution c'est de faire autrement car ton bricolage n'est pas orienté securité
tu ve faire quoi precisement (tu a l'ennoncé ?)

ps : tu faisait du java avant?
jeudi 6 mai 2004 à 21:48:10 | Re : Juste une vérification

popi0016


Bonjour djl et merci, non je n'est pas fait de java avant pour te repondre

disons que je voudrais savoir ou je dois placer ma boucle qui supprime mes iterators et pour le probleme du destructeur j'ai compris car il va etre appele par une fonction "detruit_instances" qui comportera une fonction pour choisir par son etiquette string l'instance a detruire, apres lecture de cette string et donc le destructeur qui suivra...

Le but de l'exo est de creer plusieurs classes "conteneurs" (je sais pas si ca se dit) et de les associes

on part de la mere Stade
--> Joueur }
--> Ballon } derivees
--> But }

et les associes par des iterators si j'ai bien compris du style :

un joueur a un but, associer des joueurs a un ballon ect...


Je voudrais avoir des commentaires explicites sur les conteneurs <vector> <list>, ect... afin de rendre mes futurs programme plus sûrs que ceux que je developpe actuellement avec des pointeurs sur des types de variables simples comme les char, int ect...
programmation qui se rapproche plus du langage C malgre une structure POO (je comprends tous les mecanismes des classes, le roles des constructeur, destructeur, des surdefinition ect..., ainsi que la manipulation de patrons simples mais je voudrais acceder aux conteneurs puis quand "je serais plus grands" les "smarts pointeurs" en gros c'est une suite logique de mon apprentissage de la prog à petits pas...

C --> C++ --> STL ect...

voila et encore merci : )
jeudi 6 mai 2004 à 22:08:29 | Re : Juste une vérification

djl


pour te faire la main avec les ocnteneur de la stl va sur le site d'hylvenir
http://hylvenir.free.fr

tu verra tu acrochera et tochera plus aux pointeurs
jeudi 6 mai 2004 à 22:09:44 | Re : Juste une vérification

popi0016

A oui voici l'intitule de l'exo, c'est un PDF mille excuses pour l'oubli

http://www.math-info.univ-paris5.fr/~bouzy/Doc/TPCpp.pdf

voila et merci
jeudi 6 mai 2004 à 22:43:59 | Re : Juste une vérification

djl


je sais pas koi dire, si ce n'est que le niveau de la personne qui a fait ca est douteux

le void main()
l'explication bidon pour le using namespace std
des new sans delete associer
melange de vector et pointeur
l'utilisation des fstream
principe de securite
...


a mon avis doit y avoir mieux comme tp, celui la semble plutot etre bon pour prendre de mauvaises habitude
jeudi 6 mai 2004 à 23:15:00 | Re : Juste une vérification

popi0016

connaîtrais-tu un bon exemple dans ce cas pour que je puisse assimiler la notion de conteneur, d'itérateur et les algo. associées... car je bosse autrement avec le livre de Claude Delannoy (ingenieur au CNRS) "Programmer en C++" un pavé de 600 pages mais j'atteinds mes limites au chapitre des "template" (ce qui correspond au debut du niveau expert alors que je pense pas avoir acquis tout ce qu'il y a en dessous ...) et des conteneurs (PS j'en utilisais deja un sans le savoir avec <string> comme quoi mais justement j'aimerai compendre son principe avec les iterateurs "iterator" et "reverse_iterator" et les specifiques comme begin() ou end(). C'est comme un <vector> mais la ca devient flou... en gros je voudrais comprendre ce qui se passe dans les "M_Start", "M_Finish", "Data" ect... et avoir un exemple simple pour utliser les <list>, <vector>, <map> ect... et quand les utiliser en esperant que ce n'est pas trop demander merci ....


Cette discussion est classée dans : void, joueur, main, instances, stade


Répondre à ce message

Sujets en rapport avec ce message

Problème avec string [ par visualstar ] Bonjour, J'ai un problème en C++ avec les string.Comment peut-on faire pour passer un string à une fonction. Dans cette fonction, je fais un cin ; mai Pb avec les classes [ par Rouliann ] Bonjour tout le monde!Alors comme je sais pas trop d'où vient le pb je vais afficher ma source et les erreurs qu'elle génère! lol//joueur.h#include <s Erreur de compilation ... [ par Tidam ] RE bijour a tous ! Voila quand je compil sous linux ma source, j'obtient les erreurs suivante : main.cpp:239: void value not ignored as it ought to be Variables globales [ par nisaloncaje ] Bonjour, je suis en train de créer un petit programme en c (j'utilise devc++) et j'ai un problème : je n'y comprends rien au variables globales !En ef cpp template et map [ par sebome ] Bonjour à tous.Je me suis lancé a faire un petit programme pour apprendre a me servir des map.J'ai essayé aussi de faire des fonctions template pour a exemple de thread [ par dambeaufort ] bonjour,Je ne comprend pas trés bien comment creer un thread.Est ce que quelqu'un d'entre vous pourrais me fournir un source qui permettent d'avoir 2 jeux d'échec qui nous met en échec!! [ par shinohinata01 ] Bonjour,nous rencontrons actuellement un problème sur un de nos programmes qui traite d'un jeux d'échec.en gros nous avons une fonction dans une class fonction inline dans une classe (sous Qt) [ par debutant VB ] Bonjour tout le monde, Pour des raisons d'optimisation de rapidité, j'aimerais rendre quelques petites fonctions d'une de mes classes en inline, mais Problème classe et main : argument does not match [ par RS8 ] Bonjour,je fais actuellement de 'lOpenGL.Je voudrais avoir deux fichiers : drawing.cpp et main.cppDans le main.cpp il n'y a que le main et dans drawin important [ par cmoapierre ] File1.h:class Addition100 { private : int Valeur ; public : void EcrireNombre(int prmN) ; void Additionner100(void) ; int LireNombre(voi


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,073 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales