Untitled

mail@pastecode.io avatar
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;
}