C++: Overloading the = operator to create an uint8_t compatible data type -
i think should rather trivial:
i wrote class handle binary coded decimal (bcd) 8 bit values.
class has methodes set(), get(), add(), sub() etc. works perfectly.
example get():
class bcd8_t { public: uint8_t get() { return value_u8; } private: uint8_t value_u8; };
now want convert class new data type. want replace
bcd8_t a; uint8_t b = a.get();
by
bcd8_t a; uint8_t b = (uint8_t)a;
so expected can write overloaded "=" operator returns uint8_t, like:
class bcd8_t { public: uint8_t operator=() { return value_u8; } private: uint8_t value_u8; };
however, ever tried compiler tells me
cannot convert 'bcd8_t' 'uint8_t'
or
invalid cast type 'bcd8_t' type 'uint8_t'
how this?
the assignment operator assign to class.
for converting object of class need implement type-cast operator:
class bcd8_t { public: ... operator uint8_t() const { return value_u8; } ... };
for binary operator implement member functions (with binary operators mean take 2 operands, example assignment, comparison, addition, etc.) object class always left-hand side of operator.
lets take assignment operator example. if overload assignment operator in class , like
bcd8_t a; any_type b; ... = b;
then compiler convert assignment to
a.operator=(b);
it's same operators overload member functions.
also, operators (including assignment operator) can only implemented member functions. can't have non-member function overload of assignment operator, it's not allowed.
see e.g. this operator overloading reference more information.
Comments
Post a Comment