C++/Class/Union Class — различия между версиями

Материал из C\C++ эксперт
Перейти к: навигация, поиск
м (1 версия: Импорт контента...)
 
м (1 версия: Импорт контента...)
 
(нет различий)

Текущая версия на 10:25, 25 мая 2010

An anonymous union is a union that has neither a tag name nor any objects specified in its declaration.

  
#include <iostream>  
using namespace std;
main(void)  
{  
  union {  
    int i;  
    char ch[2];  
  } ;
     
  /* Now reference i and ch without referencing  
     a union name or dot or arrow operators.  
  */  
  i = 88;  
  cout << i << " " << ch[0];  
     
  return 0;  
}


Anonymous union

   
#include <iostream>
#include <string.h>
using namespace std;
int main(void){
  union{
    long l;
    double d;
    char s[4];
  };
  l = 100000;
  cout << l << " ";
  d = 123.2342;
  cout << d << " ";
  strcpy(s, "hi");
  cout << s;
}


Unions and Classes are Related

  
#include <iostream>  
using namespace std;
union u_type {  
  u_type(int a);  // public by default  
  void showchars(void);  
  int i;  
  char ch[2];  
};  
     
u_type::u_type(int a)  
{  
  i = a;  
}  
     
void u_type::showchars(void)  
{  
  cout << ch[0] << " ";  
  cout << ch[1] << "\n";  
}  
     
main(void)  
{  
  u_type u(1000);  
     
  u.showchars();  
     
  return 0;  
}


Use union to define class

 
#include <iostream>
using namespace std;
union bits {
  bits(double n);
  void show_bits();
  double d;
  unsigned char c[sizeof(double)];
};
bits::bits(double n)
{
  d = n;
}
void bits::show_bits()
{
  int i, j;
  for(j = sizeof(double)-1; j>=0; j--) {
    cout << "Bit pattern in byte " << j << ": ";
    for(i = 128; i; i >>= 1) 
      if(i & c[j]) cout << "1";
      else cout << "0";
    cout << endl;
  }
}
int main()
{
  bits ob(1991.829);
  ob.show_bits();
  return 0;
}