Dev - C++ - tengo un problema con POO en c++

 
Vista:

tengo un problema con POO en c++

Publicado por Jorge (1 intervención) el 01/09/2009 17:00:47
Hola, estoy comenzando a utilizar POO y en el programa me aparece un problema que no conzco y quisiera que me ayuden.

En realidad es un trabajo y no ocurre ningún error al compilar.
La ideas es hacer tratado de esepciones en una pila (vector unidimencional). El trabajo consiste en traducir un proyecto en java en c++. Mi problema ocurre al momento de ejecución aparece lo siguiente:
"This application has recuested, the runtime to terminate it in an unusual way. please contact the application`s support team for more information.."

Aquì va el còdigo.

#include <iostream.h>
#include <conio.h>
#include <exception>

using namespace std;

class pilallenaexception : public exception{
private:
int dato;
public:
pilallenaexception(int){

};
int getdato () {
return (dato);
}
};

class pilavaciaexception : public exception{
private:
int dato;
public:
pilavaciaexception(){

};
};

class pila {
private:
int capacidad, indice; // son los datos que pertencen a el objeto de la clase "pila"
int *datos; // no se por que se utiliza *
public:
pila (int); //constructor (prototipo)
pila (); //CONSTRUCTOR predeterminado (prototipo)
~pila(){ //destructor //elimina cada componente de la clase
delete &capacidad;
delete &indice;
delete &datos;
};
void vaciar(){ indice=0;};
bool estaVacia(){
return (indice == 0);
};
bool estaLlena(){
return (indice == capacidad);
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////

void mostrar()throw (pilavaciaexception) {
if(!estaVacia()){
for(int i=indice-1;i>=0;i--)
cout<<" elem = "<<datos[i];
}
else throw new pilavaciaexception();
}
int desapilar() throw (pilavaciaexception){
if(!estaVacia()) return (datos[--indice]);
else throw new pilavaciaexception();
}
void apilar(int elem) throw (pilallenaexception){
if(!estaLlena()) datos[indice++]=elem;
else throw new pilallenaexception(elem);
}
int cima() throw (pilavaciaexception){
if(!estaVacia()) return datos[indice-1];
else throw new pilavaciaexception();
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////

};

pila::pila (){ //constructor (inicializa los valores por default)
capacidad=10; indice=0;
datos = new int [capacidad];
}
pila::pila (int cap){ //constructor con una capacidad indicada
capacidad=cap; indice=0;
datos = new int [capacidad];
}

int main(int argc, char *argv[])
{
/////////////////////////////////////////////////////////////////////////////////////////
int aux;
pila pila(10);
try{
aux=25; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=-45; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=-12; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=67; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=1; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=0; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=-43; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=89; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);

aux = pila.desapilar();
cout<<"desapilando elem "<<aux<<endl;
aux = pila.desapilar();
cout<<"desapilando elem "<<aux<<endl;
aux = pila.desapilar();
cout<<"desapilando elem "<<aux<<endl;
cout<<"Cima: "<<pila.cima();
aux=564; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=-987; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=-10; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=56; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
aux=1111; cout<<"apilando elem "<<aux<<endl;
pila.apilar(aux);
if(pila.estaLlena()) cout<<"pila llena"<<endl;
cout<<"mostrando contenido";
pila.mostrar();
aux=666; cout<<" apilando elem "<<aux;
pila.apilar(aux);
}
catch (pilavaciaexception e){
cout<<"la pila está vacia";
}
catch(pilallenaexception e){
cout<<"No pUedo empilar elem : "<<e.getdato()<<" la pila está "Llena"";

};


////////////////////////////////////////////////////////////////////////////////7
getch();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:tengo un problema con POO en c++

Publicado por Marcos (1 intervención) el 07/10/2009 10:25:44
No entiendo esos deletes, a simple vista el delete lo tienes que hacer el array datos porque es para el que reservar memoria dinámica, prueba a cambiar esto.

~pila(){ //destructor //elimina cada componente de la clase
delete []datos;
};

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar