// Ejemplo de unión con discriminador
// 2009 Con Clase, Salvador Pozo
#include <iostream>
using namespace std;
struct tipoLibro {
int codigo;
char autor[80];
char titulo[80];
char editorial[32];
int anno;
};
struct tipoRevista {
int codigo;
char nombre[32];
int mes;
int anno;
};
struct tipoPelicula {
int codigo;
char titulo[80];
char director[80];
char productora[32];
int anno;
};
enum eEjemplar { libro, revista, pelicula };
struct tipoEjemplar {
eEjemplar tipo;
union {
tipoLibro l;
tipoRevista r;
tipoPelicula p;
};
};
tipoEjemplar tabla[100];
int main() {
tabla[0].tipo = libro;
tabla[0].l.codigo = 3;
strcpy(tabla[0].l.titulo, "El señor de los anillos");
strcpy(tabla[0].l.autor, "J.R.R. Tolkien");
tabla[0].l.anno = 1954;
tabla[1].tipo = revista;
tabla[1].r.codigo = 12;
strcpy(tabla[1].r.nombre, "National Geographic");
tabla[1].r.mes = 11;
tabla[1].r.anno = 2009;
tabla[2].tipo = pelicula;
tabla[2].p.codigo = 43;
strcpy(tabla[2].p.titulo, "Blade Runner");
strcpy(tabla[2].p.director, "Ridley Scott");
strcpy(tabla[2].p.productora, "Warner Bros. Pictures");
tabla[2].l.anno = 1982;
for(int i=0; i < 3; i++) {
switch(tabla[i].tipo) {
case libro:
cout << "[" << tabla[i].l.codigo << "] Libro titulo: " << tabla[i].l.titulo << endl;
break;
case revista:
cout << "[" << tabla[i].r.codigo << "] Revista nombre: " << tabla[i].r.nombre << endl;
break;
case pelicula:
cout << "[" << tabla[i].p.codigo << "] Pelicula titulo: " << tabla[i].p.titulo << endl;
break;
}
}
return 0;
}