[C++]::[Vector] prb avec un vecteur

Fermé
titou - 10 juin 2004 à 19:52
 titou - 11 juin 2004 à 10:17
Bonjours,

- j'ai un problème avec un pti projet pour une épreuve, j'ai une classe (Atelier) contentent un tableau de vecteur de type Roues4.
Cette class Roues4 est un class enfant d'une classe vehicule qui contient un vecteur d'entretient.

- j'arrive a utiliser le vecteur de Roues4 mais mon problème est que le vecteur de d'Entretien disparaît car mon véhicule meurt , je pers donc ces les valeur du vecteur d’entretien.

J'ai cherché et apres leur insertion ds le vecteur de roues4 mon objet roues4 appel son destructeur sans que je lui les demandé !!!! 8O


Le diagrame de class:

[img]http://membres.lycos.fr/marhans/titou.JPG[/img]

- n'etant pas expert en c++ je demande un pti coup de main pour trouver l'origine de cette erreur.

voici le bout de code de declaration des class:

[code]

class Atelier
{
private :
vector < Roues4 > VehiculeR4;
vector < Roues2 > VehiculeR2;
vector < EntretienType > TabEntretienType;

protected :

public:
Atelier();
~Atelier();
};
[/code]

[code]
class Vehicule
{
protected:
string numImma;
int nbKmActuel;
vector <Entretien> TabEntretien;

public :
Vehicule();
Vehicule(string _numImma, int _nbKmActuel);
~Vehicule();
int GetNbKmActuel();
int GetNbEntretiens();
Entretien GetEntretien(int index);
void AddEntretien(string unDate, string unCommentaire, EntretienType unType);
void AffEntretient();
};
[/code]

4 réponses

tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
10 juin 2004 à 23:12
salut, coe Roues4 est un Vehicule, donc il englobe tout ce qu'englobe Vehicule et donc qd tu appelles le destructeur de Roues4, le destructeur de Vehicule est appelé automatiquement (il le faut bien car il faut detruire aussi la partie Vehicule de Roues4).

je ne sais pas si je suis clair ou si j'ai bien compris ta question.

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
0
non le probleme c'est que je pert automatiquement les valeur du vecteur apres l'insertion de l'objet dedans... Car Roues4 meurt ce que je souhaite pas
0
je souhaite conserver le vecteur d Entretien pour pouvoir effectuer des teste sur mon Vehicule (genre doit il avoir un entretien ?)
0
mon probleme c'est que comme l'objet Roues4 meurt je perd le tableaux stockés(vecteur).
Je doit utiliser des pointeurs ?(simple question pour avancer)

VOICI LE CODE POUR COMPRENDRE :

/******************************************************************************/
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <vector.h>

/*******************************************************************************
* Class EntretienType *
*******************************************************************************/

class EntretienType
{
private:

private:
string code;
int nbKm;
int nbKmTolere;


public:
EntretienType();
EntretienType(string _code, int _nbKm, int _nbKmTolere);
virtual ~EntretienType();
int getNbKm();
int getNbKmTolere();
};
/************************** Déclaration des methodes *************************/

EntretienType::EntretienType()
{}

EntretienType::EntretienType(string _code, int _nbKm, int _nbKmTolere )
{
code = _code;
nbKm = _nbKm;
nbKmTolere = _nbKmTolere;
}

EntretienType::~EntretienType()
{}

int EntretienType::getNbKm()
// retourne le kilométrage standard du type d’entretien.
{
return nbKm;
}

int EntretienType::getNbKmTolere()
// retourne la marge de tolérance en km majorant ou minorant le kilométragestandard
{
return nbKmTolere;
}

/*******************************************************************************
* Class Entretien *
*******************************************************************************/

class Entretien
{
private:
string dateEntretien;
int nbKmCompteur;
string commentaire;
EntretienType Type;

public:
Entretien();
Entretien(string _dateEntretien,string _commentaire,int _nbKmCompteur,EntretienType _Type);
virtual ~Entretien();
int Entretien::getNbKmCompteur();
};
/************************ Déclaration des methodes *************************/

Entretien::Entretien()
{}

Entretien::Entretien
(string _dateEntretien,string _commentaire,int _nbKmCompteur,EntretienType _Type)
{
dateEntretien = _dateEntretien;
nbKmCompteur = _nbKmCompteur;
commentaire = _commentaire;
Type = _Type;
}

Entretien::~Entretien()
{}

int Entretien::getNbKmCompteur()
// retourne le kilométrage du véhicule pour l’entretien courant.
{
return nbKmCompteur;
};

/*******************************************************************************
* Class Vehicule *
*******************************************************************************/

class Vehicule
{
protected:
string numImma;
int nbKmActuel;
vector <Entretien> TabEntretien ;

public :
Vehicule();
Vehicule(string _numImma, int _nbKmActuel);
~Vehicule();
int GetNbKmActuel();
int GetNbEntretiens();
Entretien GetEntretien(int index);
void AddEntretien(string unDate, string unCommentaire, EntretienType unType);
void AffEntretient();
};
/************************ Déclaration des methodes *************************/

Vehicule::Vehicule()
{

}

Vehicule::Vehicule(string _numImma, int _nbKmActuel)
{
numImma = _numImma;
nbKmActuel = _nbKmActuel;
}

Vehicule::~Vehicule()
{
cout << "Objet vehicule mort " << numImma << endl;
};

int Vehicule::GetNbKmActuel()
// retourne le kilométrage du véhicule courant.
{
return nbKmActuel;
};


void Vehicule::AddEntretien(string unDate, string unCommentaire, EntretienType unType)
// ajoute un entretien au véhicule courant.
{
Entretien z(unDate,unCommentaire,nbKmActuel,unType);
TabEntretien.push_back(z);
};

Entretien Vehicule::GetEntretien(int index)
// retourne l’entretien dont le rang est égal à l’index.
{
return TabEntretien[index];
};

int Vehicule :: GetNbEntretiens()
// retourne le nombre total d’entretiens effectués sur le véhicule courant.
{

return 0;
};

void Vehicule :: AffEntretient()
{

cout << "NB TabEntretien !! : " << TabEntretien.capacity() << endl;

}
/*******************************************************************************
* Class Roues4 *
*******************************************************************************/

class Roues4 : public Vehicule
{
private :
string TypeCarburant;
protected :

public :
Roues4();
~Roues4();
Roues4(string _numImma, int _nbKmActuel, string _TypeCarburant);
string GetTypeCarburant();
};
/************************* Déclaration des methodes *************************/

Roues4::Roues4()
: Vehicule()
{}

Roues4::Roues4(string _numImma, int _nbKmActuel, string _TypeCarburant)
: Vehicule(_numImma, _nbKmActuel)
{ TypeCarburant = _TypeCarburant;}

Roues4 :: ~Roues4()
{}

string Roues4 :: GetTypeCarburant()
{
return TypeCarburant;
};

/*******************************************************************************
* Class Roues2 *
*******************************************************************************/

class Roues2 : public Vehicule
{
private :

protected :

public :
Roues2();
~Roues2();
Roues2(string _numImma, int _nbKmActuel);
};

/************************** Déclaration des methodes *************************/

Roues2::Roues2()
: Vehicule()
{}

Roues2::Roues2(string _numImma, int _nbKmActuel)
: Vehicule(_numImma, _nbKmActuel)
{}

Roues2 :: ~Roues2()
{}

/*******************************************************************************
* Class Atelier *
*******************************************************************************/

class Atelier
{
private :
vector < Roues4 > VehiculeR4;
vector < Roues2 > VehiculeR2;
vector < EntretienType > TabEntretienType;

protected :

public:
Atelier();
~Atelier();

//Methode pour le vecteur Roues4.
void addVehicule4(Roues4 v);
Roues4 GetVehicule4(int index);

// Methode pour le vecteur Roues2.
void addVehicule2(Roues2 v);
Roues2 GetVehicule2(int index);
/* Methode a redeclarer */
// Methode pour le vecteur EntretienType.
void addEntretienType(EntretienType v);
EntretienType GetEntretienType(int index);

// Methode pour tester si un vehicule necesite un entretient.
bool necessiteEntretienV2(Roues2 V);
bool necessiteEntretienV4(Roues4 V);

// Methode pour qui retourne un ensemble de vehicule necesitant un entretient.
Roues2 vehiculesAEntretenirV2();
Roues4 vehiculesAEntretenirV4();

};

/************************** Déclaration des methodes *************************/

Atelier::Atelier()
{cout << "Objet Atelier Cree" << endl;};


Atelier::~Atelier()
{cout << "Objet Atelier tuer" << endl;}

//Methode pour le vecteur Roues4.
void Atelier::addVehicule4(Roues4 v) //Ajout element.
{
VehiculeR4.push_back(v);
};

Roues4 Atelier::GetVehicule4(int index) //Retourne element.
{
return VehiculeR4[index];
};

// Methode pour le vecteur Roues2.
void Atelier::addVehicule2(Roues2 v) //Ajout element.
{
VehiculeR2.push_back(v);
};

Roues2 Atelier::GetVehicule2(int index) //Retourne element.
{
return VehiculeR2[index];
};

// Methode pour le vecteur EntretienType.
void Atelier::addEntretienType(EntretienType v) //Ajout element.
{
TabEntretienType.push_back(v);
};

EntretienType Atelier::GetEntretienType(int index) //Retourne element.
{
return TabEntretienType[index];
};

// Methode pour tester si un vehicule necesite un entretient.
bool Atelier::necessiteEntretienV2(Roues2 V)
{
bool value;

return value;
};

bool Atelier::necessiteEntretienV4(Roues4 V)
{
bool trouve;

return trouve;
};

// Methode pour qui retourne un ensemble de vehicule necesitant un entretient.
Roues2 Atelier::vehiculesAEntretenirV2()
{
int index;

return VehiculeR2[index];

};

Roues4 Atelier::vehiculesAEntretenirV4()
{
int index;

return VehiculeR4[index];
};
/*******************************************************************************
* Fin Class *
*******************************************************************************/

main ()
{
Atelier A;

Roues4 V("1123VH34",95000,"SP95");
A.addVehicule4(V);

Roues4 V1("94VH34",100000,"DSL");
A.addVehicule4(V1);

EntretienType ET0("VIDANGE N1",20000,5000);
A.GetVehicule4(1).AddEntretien("18-11-2004","Vidange N1, RAS",ET0);

EntretienType ET1("VIDANGE N2",20000,5000);
A.GetVehicule4(1).AddEntretien("18-11-2004","Vidange N2, RAS",ET1);

A.GetVehicule4(1).AffEntretient();
cout << "le nb est : " << V.GetNbEntretiens() << endl;

getch ();
};
0