popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005
-
6 mai 2004 à 18:10
popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005
-
6 mai 2004 à 23:15
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 ;
}
//---------------------------------------------------------------------------
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
};
// - 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() -----------------------------------------------
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
popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005 6 mai 2004 à 21:48
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...
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 6 mai 2004 à 22:43
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
popi0016
Messages postés24Date d'inscriptionjeudi 6 mai 2004StatutMembreDernière intervention21 janvier 2005 6 mai 2004 à 23:15
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 :big) ...) 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 .... :big) :big) :big)