Here is a sample code of enumeration type wrapping class in C++.




[Source Code]


#include <stdio.h>

class Days
{
public:
  enum _Days
  {
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
  };

protected:
  _Days value;

public:
  Days()                  {                      } // default ctor
  Days(const _Days value) { this->value = value; } // conversion ctor
  operator _Days() const  { return value;        } // cast operator
};

void size_of_test()
{
  printf("sizeof(Days)=%d\n", sizeof(Days));
}

void default_ctor_test()
{
  Days today;    // default ctor
  Days tomorrow; // default ctor
}

void conversion_ctor_test()
{
  Days today(Days::Friday);      // conversion ctor
  Days tomorrow(Days::Saturday); // conversion ctor
}

void copy_ctor_test()
{
  Days today(Days::Friday); // conversion ctor
  Days tomorrow(today);     // copy ctor
}

void compare_test()
{
  Days today(Days::Friday);
  Days tomorrow(Days::Saturday);

  if (today == tomorrow) // cast operator
    printf("same\n");
  else
    printf("not same\n");

  if (today <  tomorrow) // cast operator
    printf("less \n");
  else
    printf("not less\n");

  if (today >  tomorrow) // cast operator
    printf("greater\n");
  else
    printf("not greater\n");
}

void pointer_test()
{
  Days today(Days::Friday);
  Days tomorrow(Days::Saturday);

  Days* p_today    = &today;
  Days* p_tomorrow = &tomorrow;

  if (*p_today == *p_tomorrow) // cast operator
    printf("same\n");
  else
    printf("not same\n");
}

void reference_test()
{
  Days today(Days::Friday);
  Days tomorrow(Days::Saturday);

  Days& r_today    = today;
  Days& r_tomorrow = tomorrow;

  if (r_today == r_tomorrow) // cast operator
    printf("same\n");
  else
    printf("not same\n");
}

int main()
{
  size_of_test();
  default_ctor_test();
  conversion_ctor_test();
  copy_ctor_test();
  compare_test();
  pointer_test();
  reference_test();
}