salut a tous. Voila j'ai fais une "pile" en utilisant une classe "pile template" et j'ai quelques erreurs.
1: Quand je rentre des entiers au lieu de caracteres en entree clavier, la fonction
fail() que j'utilise avec un exception "throw" ne me le detecte pas?
2: Ensuite il me crée parfois une erreur de debogage du je pense a la non liberation
de l'emplacement mémoire de l'objet pile1 que je cree. Mais je vois pas ou ça cloche?
Merci pour vos explications.
J'ai un corrigé qui marche, mais le deroulement du prog n'est pas du tout le même
donc j'aimerais quand même savoir ou sont mes fautes.
Merci.
#include <iostream.h>
#include<conio.h>
#include<stdlib.h>
/************************************/
template <class T> class PileQuelc //definition de la classe
{
private:
T *debut;
T *courant;
int dim;
public: //accessible de l'exterieur..methode
PileQuelc(int s); //constructeur
~PileQuelc();
void empiler (T element);
T depiler();
int nbreElements;
};
/*************constructeur********************/
template <class T> PileQuelc<T>::PileQuelc(int s)
{
dim=s;
debut=new T[dim];
courant=debut;
}
/**************Destructeur*************************/
template <class T>PileQuelc<T>::~PileQuelc()
{
delete[] debut;
courant=NULL;
cout<<"destruction de l'objet";
}
/****************************************/
template <class T> void PileQuelc<T>::empiler(T element)
{
if(courant < (debut+dim))
{
*courant=element;
courant++;
}
else
throw "\nla pile est pleine\n";
}
/*************************************/
template <class T> T PileQuelc<T>::depiler()
{
if(courant>debut) courant--;
else
throw "\nla pile est vide\n";
return (*courant);
}
/*********Programme main********************/
int main(int argc, char* argv[])
{
/****Définition taille de la pile et creation****/
int t;
cout<<"Rentrer la taille de la pile: ";
cin>>t;
PileQuelc<int> pile1(t);
/****Empiler les nombres entiers****/
int i=0;
char c=0; int sortir=1;
cout<<"\nChoisissez une option: \n\n";
cout<<"Option: Empiler un element: Entrez 1\n";
cout<<"Option: Depiler un element: Entrez 2\n";
cout<<"Option: Sortie du programme, Entrez 0\n";
cin>>i;
do{
try{
switch(i)
{
case 1:
cout<<"Rentrer l'element a empiler:(caractere): \n";
cin>>c;
if(cin.fail()) throw "echec detecte par fail()";
pile1.empiler(c);
break;
case 2:
cout<<"l'element va etre depiler: \n";
pile1.depiler();
break;
case 3:
cout<<"Sortie du programme\n";
sortir=0;
pile1.~PileQuelc();
break;
}
}
catch(char *erreur)
{
cout<<erreur<<endl;
pile1.~PileQuelc();
getch();
abort();
}
}while(sortir!=0);
getch();
return 0;
}