Untitled
unknown
plain_text
3 years ago
7.5 kB
10
Indexable
// 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;
}Editor is loading...