Untitled
unknown
plain_text
2 years ago
7.5 kB
1
Indexable
Never
// liberias #include <iostream> #include <string> // no necesario time.h using namespace std; // cShow.h class cShow { private: time_t fecha; int duracion; cElemento** listaE; cListaCanciones* listaC; // suponer existencia int cantE; int cantActE; int cantC; public: void operator-(cElemento* elemento); cElemento* operator[](int i); cShow(duracion = 60, cantE = 5, cantC = 5); ~cShow(); void agregar(cElemento* elemento); cElemento* quitar(cElemento* elemento); int buscar(cELemento* elemento); void listar(); void eliminar(cElemento* elemento); void iniciarShow(cCancion* cancion); void terminarShow(); void cambiarBaterias(); }; ostream& opearator<<(ostream& out, cShow& show) { out << "Fecha: " << ctime(&fecha) << endl << "Duracion: " << duracion; for(int i = 0; i < cantActE; i++) { (*(listaE))[i]->imprimir // suponer existencia } for(int i = 0; i < cantC; i++) { // mismo que linea 31 } return out; } istream& operator>>(istream& in, cShow& show) { int temp; in >> temp; show.setDuracion(temp); // suponer existencia return in; } // cShow.cpp void cShow::operator-(cElemento* elemento) { eliminar(elemento); } cElemento* cShow::operator[](int i) { try { if(i < 0 || i > cantE) { throw exception("Cantidad no valida"); } } catch(exception& e) { cout << e.what() << endl; } return listaE[i]; } cShow::cShow(duracion, cantE, cantC) { duracion = duracion; cantE = cantE; cantC = cantC; cantActE = 0; try { listaE = new * cListaE(cantE); for(i = 0; i < cantE; i++) { listaE[i] = new cListaE; } listaC = new cListaC(cantC); } catch(bad_alloc& e) { cout << e.what() << endl; } } cShow::~cShow() { // supongo que siempre quiero eliminar punteros internos for(i = 0; i < cantE; i++) { delete listaE[i]; } delete[] listaE; delete listaC; } void cShow::agregar(cElemento* elemento) { listaE[cantActE++] = elemento; } cElemento* cShow::quitar(cElemento* elemento) { cElemento* temp = listaE[buscar(elemento)]; listaE[buscar(elemento)] = NULL; ordenar() // suponer existencia; cantActE--; return temp; } int cShow::buscar(cElemento* elemento) { for(int i = 0; i < cantActE; i++) { if(cListaE[i] == elemento) { return i; } } } void cShow::listar() { for(int i = 0; i < cantActE; i++) { (*(listaE))[i]->imprimir; // suponer existencia } for(int i = 0; i < cantC; i++) { // mismo que linea 121 } } void cShow::eliminar(cElemento* elemento) { quitar(elemento); } void cShow::iniciarShow(cCancion* cancion) { for(int i = 0; i < cantActE; i++) { cElementoE[i]->encender(); cELementoE[i]->ejecutar(cCancion* cancion); } } void cShow::terminarShow() { for(int i = 0; i < cantActE; i++) { cElementoE[i]->apagar(); } } void cShow::cambiarBaterias() { cMicrofono* temp = new cMicrofono(cantActE); int cont = 0; for(int i = 0; i < cantActE; i++) { if(dynamic_cast<cMicrofono*>(listaE)) temp[++cont] = listaE[i]; } for(int i = 0; i < cont - 1; i++) { for(int j = 0; j < cont - i - 1; j++) { if(temp[j] > temp[j + 1]) swap(temp[j], temp[j + 1]); } } for(int i = 0; i < cont; i++) { temp[i]->cargar(); } } // cElemento.h class cElemento { friend class cShow protected: const int ID; eEstado estado; // suponer existencia public: static int IDMAX; void apagar(); void encender(); virtual void ejecutar(cCancion* cancion) = 0; int getID() const; cElemento(); ~cElemento(); }; // cElemento.cpp int cElemento::IDMAX = 0; cElemento::cElemento() : ID(IDMAX++) { estado = APAGADO; } cElemento::~cElemento() { } void cElemento::apagar() { estado = APAGADO; } void cElemento::encender() { estado = ENCENDIDO; } int cElemento::getID() const { return ID; } // cPantalla.h class cPantalla : public cElemento { private: string nombreVideo; bool PoR // true = reproduciendo, false = pausa public: void cambiarFuente(string _nombreVideo); cPantalla(string nombreVideo); cPantalla(cPantalla& otro); ~cPantalla(); }; // cPantalla.cpp cPantalla::cPantalla(cPantalla& otro) : cELemento() { nombreVideo = otro.getNombre(); // suponer existencia PoR = false; } cPantalla::~cPantalla() { } void cPantalla::cambiarFuente(string _nombreVideo) { nombreVideo = _nombreVideo; } void cPantalla::ejecutar(cCancion* cancion) { if(nombreVideo != cancion->getNombre()) // suponer existencia nombreVideo = "VIVO"; PoR = true; } // cFuegosArtificiales.h class cFuegosArtificiales : public cElemento { private: eTipo tipoFuego; const string color; float temperatura; bool lanzado; string cancionLanzada; public: void lanzarFuego(cCancion* cancion); bool verificarTemperatura(); void setTempertatura(float _temperatura); }; // cFuegosArtificiales.cpp void cFuegosArtificiales::ejecutar(cCancion* cancion) { lanzarFuego(cancion); } void cFuegosArtificiales::lanzarFuego() { try{ if(verificarTemperatura()) { if(cancionLanzada == cancion) lanzado = true; } } catch(const char* e) { cout << e << endl; } } bool cFuegosArtificiales::verificarTemperatura() { if(temperatura > 50) throw "ALERTA: La temperatura es mayor a 50, no puede lanzarase el fuego artificial"; } float cFuegosArtificiales::setTempertatura(float _temperatura) { temperatura = _temperatura; } // cMicrofono.h class cMicrofono : public cElemento { private: eArtista artista; float bateria; bool activado public: void activar(); void desactivar(); void cargar(); cMicrofono(eArtista artista); ~cMicrofono(); }; // cMicrofono.cpp cMicrofono::cMicrofono(eArtista artista) { artista = artista; } cMicrofono::~cMicrofono() { } void cMicrofono::activar() { activado = true; } void cMicrofono::desactivar() { activado = false; } void cMicrofono::cargar() { bateria = 100; } void cMicrofono::ejecutar(cCancion* cancion) { int r = rand() % 7 + 2; bateria -= r * bateria / 100; activar(); } // cCancion.h class cCancion : public cElemento { private: const string nombre; bool videoAsociado; bool cantantes; }; // main.cpp void operator+(cShow* show, cElemento* elemento) { show->agregar(elemento); } int main() { cShow* show = new cShow(); cin >> *show; cCancion* cancion = new cCancion("no escucho musica1", true, false); // suponer existencia (constructor) cCancion* cancion1 = new cCancion("no escucho musica2", true, false); cPantalla* pantalla = new cPantalla(cancion->getNombre()); // suponer existencia (getter) cPantalla* pantalla1 = new cPantalla(*pantalla); cFuegosArtificiales* fuegos = new cFuegosArtificiales(COMETAS, rojo, 23.4, cancion1->getNombre); /// suponer existencia (constructor) fuegos->setTempertatura(23.3); cMicrofono* micro = new cMicrofono(PRINCIPAL); cMicrofono* micro1 = new cMicrofono(BACKUP); show + cancion // suponer existencia (overload para cCancion) show + cancion1 show + pantalla; show + pantalla1; show + micro; show + micro1; *show - pantalla1; cout << *show; show->iniciarShow(cancion1); show->terminarShow(); show->cambiarBaterias(); pantalla->cambiarFuente(cancion2->getNombre()); pantalla1->cambiarFuente(cancion2->getNombre()); show->iniciarShow(cancion2); show->terminarShow(); show->cambiarBaterias(); delete show // dado que elimino punteros internos return 0; }