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