Hola. que tal? este es mi primer mensaje en el foro. cree una clase coleccion a la cual se le pueden agregar y eliminar objetos de una clase disco y tambien imprimirlos en pantalla. tengo un problema con el metodo agregardisco, se copian mal los datos y al cerrar la aplicacion el compilador me da un mensaje de error.
hay partes que estan comentadas y otras que las agregue recientemente, ya que probe de todo y no anda.
espero que prueben el codigo para que vean bien cuales son sus fallas.
espero una respuesta y la agradezco
saludos.
Clase fecha :
#ifndef FECHA_H
#define FECHA_H
#include <iostream>
#include <cstdlib>
using namespace std;
class Fecha
{
public:
Fecha(int=1,int=1,int=2007);
~Fecha();
void imprimefecha()const;
int getdia()const;
int getmes()const;
int getanio()const;
void setdia(int);
void setmes(int);
void setanio(int);
void setfecha(int,int,int);
private:
int dia;
int mes;
int anio;
};
#endif
#include "Fecha.h"
Fecha::Fecha(int d,int m,int a)
{
setfecha(d,m,a);
}
Fecha::~Fecha()
{
}
void Fecha::setfecha(int d,int m,int a)
{
setdia(d);
setmes(m);
setanio(a);
}
void Fecha::setanio(int a)
{
if((a>1900) && (a< 2200))
{
anio=a;
}
else
{
anio=2007;
}
}
void Fecha::setmes(int m)
{
if((m>=0) && (m<13) )
{
mes=m;
}
else
{
mes=1;
}
}
void Fecha::setdia(int d)
{
// verificardia(d) crearia una funcion para verificar que el dia ingresado es correcto
dia=d;
}
int Fecha::getanio()const
{
return anio;
}
int Fecha::getmes()const
{
return mes;
}
int Fecha::getdia()const
{
return dia;
}
void Fecha::imprimefecha()const
{
cout<<dia<<"/"<<mes<<"/"<<anio<<endl;
}
Clase Discos :
#ifndef DISCOS_H
#define DISCOS_H
#include <cstring>
#include <iostream>
#include <stdlib.h>
#include "Fecha.h"
using namespace std;
class Discos
{
friend ostream & operator<<(ostream&,const Discos &);
public:
Discos();
Discos(string,string,int);
Discos(string,string,int,int,int,int,int,int);
~Discos();
string getnombredisco()const;
string getinterprete()const;
void setnombredisco(string);
void setinterprete(string);
static int getcantidaddiscos();
void setcantidadtemas(int);
void settema(string,int);
void operator+();
void operator-();
private:
string nombredisco;
string interprete;
Fecha lanzamiento;
int minduracion;
int segduracion;
static int cantidaddiscos;
string *temas;
int cantidadtemas;
bool dond;
};
#endif
#include "Discos.h"
#include <conio.h>
#include <stdio.h>
#include <cstdlib>
using namespace std;
ostream & operator<<(ostream & salida, const Discos &cd)
{
salida<<"CD ="<<cd.getnombredisco()<<endl<<"Artista = "<<cd.getinterprete();
}
void Discos::operator+()
{
cout<<endl;
if(dond==false)
{
for(int j=0;j<cantidadtemas;j++)
{
cout<<"track 0"<<j+1<<":"<<temas[j]<<endl;
}
}
dond=true;
}
void Discos::operator-()
{
if(dond==true)
{
system("CLS");
cout<<nombredisco<<endl<<interprete;
}
dond=false;
}
int Discos::cantidaddiscos=0;
Discos::Discos()
{
nombredisco="xx";
interprete="yy";
cantidaddiscos++;
cantidadtemas=0;
minduracion=0;
segduracion=0;
temas=NULL;
dond=false;
}
Discos::Discos(string nomdisc,string interp,int ct)
{
nombredisco=nomdisc;
interprete=interp;
cantidaddiscos++;
cantidadtemas=ct;
minduracion=10;
segduracion=10;
temas=new string [ct];
for(int i=0;i<ct;i++)
{
temas
="track 01";
}
dond=false; //significa que no esta desplegada la lista de temas
}
Discos::Discos(string nomdisc,string interp,int ct,int md,int sd,int dl,int ml,int al):lanzamiento(dl,ml,al)
{
nombredisco=nomdisc;
interprete=interp;
cantidadtemas=ct;
cantidaddiscos++;
minduracion=md;
segduracion=sd;
temas=new string [cantidadtemas];
for(int i=0;i<cantidadtemas;i++)
{
temas="track 01"; }
dond=false;
}
Discos::~Discos()
{
if(temas!=NULL)
{
delete []temas;
}
else
{
delete temas;
}
cantidaddiscos--;
}
string Discos::getinterprete()const
{
return interprete;
}
string Discos::getnombredisco()const
{
return nombredisco;
}
int Discos::getcantidaddiscos()
{
return cantidaddiscos;
}
void Discos::setcantidadtemas(int ct)
{
if(ct>0)
{
cantidadtemas=ct;
}
else
{
cantidadtemas=1;
}
}
void Discos::setinterprete(string interp)
{
interprete=interp;
}
void Discos::setnombredisco(string ndisc)
{
nombredisco=ndisc;
}
void Discos::settema(string nomtema, int numtema)
{
for(int i=0;i<cantidadtemas;i++)
{
if(i==numtema-1)
{
temas=nomtema;
}
}
}
Clase coleccion :
#ifndef COLECCION_H
#define COLECCION_H
#include "Discos.h"
using namespace std;
class Coleccion
{
public:
Coleccion();
Coleccion(string);
void modificarinterprete(string);
void modificarnombredisco(string);
void imprimirtodoslosdiscos();
void agregardisco(Discos);
void eliminardisco(/*&*/Discos);
Discos operator[](int);
~Coleccion();
private:
Discos * cds;
int cantdiscos;
string nombrecoleccion;
void ordenarporfecha();
};
#endif
#include "Coleccion.h"
/*ostream & operator<<(ostream & salida ,const Coleccion & c)
{
salida<<c.imprimirtodoslosdiscos();
}*/
void Coleccion::imprimirtodoslosdiscos()
{
int i=0;
if(cds==NULL)
{
cout<<"No hay discos cargados en la coleccion"<<endl;
}
else
{
for(int i=0;i<cantdiscos;i++)
{
cout<<endl;
cout<<cds;
}
}
}
Discos Coleccion::operator[](int i)
{
return cds;
}
Coleccion::Coleccion()
{
cds=NULL;
nombrecoleccion="Coleccion predeterminada";
cantdiscos=0;
}
Coleccion::Coleccion(string nc)
{
cds=NULL;
nombrecoleccion=nc;
cantdiscos=0;
}
Coleccion::~Coleccion()
{
delete [] cds;
}
void Coleccion::modificarinterprete(string nint)
{
if(cds!=NULL)
{
int i=0;
string nuevonombre="";
cout<<endl;
cout<<"Ingrese el nuevo nombre de interprete : "<<endl;
cin>>nuevonombre;
for(i=0;i<cantdiscos;i++)
{
if(cds.getinterprete()==nint)
{
cds.setinterprete(nuevonombre);
break;
}
}
}
}
void Coleccion::modificarnombredisco(string nnd)
{
int i=0;
string nuevonombre="";
cout<<endl;
cout<<"Ingrese el nuevo nombre de disco : "<<endl;
cin>>nuevonombre;
for(i=0;i<cantdiscos;i++)
{
if(cds.getnombredisco()==nnd)
{
cds.setnombredisco(nuevonombre);
break;
}
}
}
void Coleccion::agregardisco(/*&*/Discos d1)
{
if(cds==NULL)
{
cds=new Discos();
cantdiscos++;
return;
}
if(cantdiscos==1)
{
Discos * arraydiscos=new Discos[2];
arraydiscos[0]=cds[0];
delete cds;
cds=new Discos[2];
cds[0]=arraydiscos[0];
cds[1]=d1;
cantdiscos++;
}
Discos * arraydiscos=new Discos[cantdiscos+1];
for(int i=0;i<cantdiscos;i++)
{
arraydiscos=cds;
cout<<arraydiscos.getnombredisco()<<endl;
cout<<cds.getnombredisco()<<endl;
}
arraydiscos[cantdiscos]=d1;
delete [] cds;
cantdiscos++;
cds=NULL;
cds=new Discos[cantdiscos];
cds=arraydiscos;
/*for(int i=0;i<cantdiscos;i++)
{
cds=arraydiscos;
}
*/
}
void Coleccion::eliminardisco(/*&*/Discos d1)
{
/* if(cds==NULL)
{
cout<<"No se cargaron cds"<<endl;
return;
}
if(cantdiscos==1)
{
delete []cds;
cds=NULL;
cantdiscos--;
}*/
//Discos * arraydiscos=new Discos[cantdiscos-1];
/* if(cds[cantdiscos-1].getnombredisco()==d1.getnombredisco())
{
for(int i=0;i<cantdiscos-2;i++)
{
arraydiscos=cds;
}
cds=NULL;
cantdiscos--;
cds=arraydiscos;
}
else
{
for(int i=0;i<cantdiscos;i++)
{
if(cds.getnombredisco()==d1.getnombredisco())
{
for(int j=i;j<cantdiscos-1;j++)
{
cds[j]=cds[j+1];
break;
}
}
else
{
break;
return;
}
}
for(int k=0;k<cantdiscos-2;k++)
{
arraydiscos[k]=cds[k];
}
delete []cds;
cantdiscos--;
cds=arraydiscos;
}*/
}