[ create a new paste ] login | about

Link: http://codepad.org/WKoFSg2A    [ raw code | output | fork ]

salvador@conclase.net - C++, pasted on Oct 22:
// 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;
}


Output:
1
2
3
[3] Libro titulo: El señor de los anillos
[12] Revista nombre: National Geographic
[43] Pelicula titulo: Blade Runner


Create a new paste based on this one


Comments: