#ifndef NATURAL_H #define NATURAL_H class Natural { public: Natural(); Natural(const unsigned long int &in_value); // Automatic cast to unsigned long int operator unsigned long int () const; const Natural& operator= (const unsigned long int &in_value); const Natural& operator++ (); const Natural operator++ (int something); Natural& operator+=(const Natural& in_natural); friend bool operator== (const Natural& in_first, const Natural& in_second); friend bool operator< (const Natural& in_first, const Natural& in_second); friend bool operator> (const Natural& in_first, const Natural& in_second); protected: // limit: sizeof(unsigned long int) unsigned long int value; }; inline Natural::Natural() { value = 0; } inline Natural::Natural(const unsigned long int &in_value) { value = in_value; } inline Natural::operator unsigned long int () const { return value; } inline const Natural& Natural::operator=(const unsigned long int& in_value) { value = in_value; return *this; } inline const Natural& Natural::operator++() { value++; return *this; } inline const Natural Natural::operator++(int something) { Natural temporary = *this; value++; return temporary; } inline Natural& Natural::operator+=(const Natural& in_natural) { value += in_natural.value; return *this; } inline bool operator==(const Natural& in_first, const Natural& in_second) { return in_first.value == in_second.value; } inline bool operator<(const Natural& in_first, const Natural& in_second) { return in_first.value < in_second.value; } inline bool operator>(const Natural& in_first, const Natural& in_second) { return in_first.value > in_second.value; } #endif // NATURAL_H