This lab will help you practice with operator overloading (mixed with classes).
Write a class
that simply
harbors
a long
integer (that is its only data member). Overload the stream operators
(input and output) for this type. Also overload the subscript
operator to allow a programmer to retrieve a particular digit
(if present). For example:
Object's Data Value Operator Call Result Commentary 1234 obj[10] 3 1234 obj[1000] 1 1234 obj[10000] -1 (doesn't have that digit)
Finally, overload the function call operator to return a range of digits. For example:
Object's Data Value Operator Call Result Commentary 1234 obj(10,1000) 123 1234 obj(1000,10) 123 1234 obj(1,10000) 1234 1234 obj(1,1) 4 1234 obj(1,100) 234 1234 obj(10,100) 23 1234 obj(10000,100000) -1 (doesn't have those digits)
Hint: Think simply! You could do these things before you even knew what a function was. Hmm...how to extract individual digits...? Try not to resort to branching/looping to accomplish either of these operations.
Note: Since this class
's entire purpose is to
extend the basic functionality associated with a long
,
it should have a non-explicit
initialization constructor.
That way, if someone tries to do one of your operations to a simple
long
variable, they'll get the right answers. (Although
this may or may not work with our compiler. It is poor at type matching
in certain situations.) Also,
since your []
and ()
operators will be
returning class
objects (not simple long
s),
you should provide a typecast operator for long
so that
you don't have to provide operators for other common long
operations (+, -, etc.). (A typecast operator is of the form:
operator TYPE ();It doesn't have a return type stated because it will be returning the type specified in its name. It should simply return the object's data value.)
Don't forget to write a test application for your class. Remember that some of the mixing tests may fail under our compiler (as well as under Visual compilers). Try them with the g++ compiler (either here or at home). If they fail, comment them out before making your final script. Make sure to note in the comments which compiler they failed with.
This assignment is (Level 2.5).