/*----------------------------------------------------------------------*/
/*                            Union.cpp                                 */
/* Authored By : H.P.Kasmaei                                            */
/* Last Update : March 29, 2009                                         */
/* http://www.hpkclasses.ir/                                            */
/*----------------------------------------------------------------------*/

#include <iostream.h>
struct generic_tag{
   char type;
   union shared_tag {
      char   c;
      int    i;
      float  f;
      } shared;
   };

void print_function( struct generic_tag generic );

main() {
   struct generic_tag var;

   var.type = 'C';
   var.shared.c = '$';
   print_function( var );

   var.type = 'F';
   var.shared.f = (float) 12345.67890;
   print_function( var );

   var.type = 'x';
   var.shared.i = 111;
   print_function( var );
   return 0;
}

void print_function( struct generic_tag generic ) {
   cout << "\n\nThe generic value is...";
   switch( generic.type ) {
       case 'C':
	  cout << generic.shared.c;
	  break;
       case 'I':
	  cout << generic.shared.i;
	  break;
       case 'F':
	  cout << generic.shared.f;
	  break;
       default:
	  cout << "an unknown type: " << generic.type;
	  break;
       }
}

