### Inheritance Best Practice? (custom number classes)

I am currently working on creating my own classes to deal with numbers. My motivation is two-fold: I use Matlab a lot as a student, and I would like to have a lot of that functionality in C++. Also, I really want to learn how to use class inheritance to the fullest.

My general idea is to create a basic Number class with virtual functions, then wrap each number type in a custom class which will derive from Number. This way, I can write functions which take Numbers.

Chances are, I'm going about this completely backwards, and there are much easier, more robust, and generally better ways to do this!

First, I have defined an enumeration NumberType, each Number has one of these guys.

Now, lets look at the definition of Number, in particular, the equality operator.

 ``12345678910111213`` ``````class Number { protected: Number(NumberType t) : type(t) {} // NumberType is an enumeration public: virtual ~Number(void) {} // virtual equality operator friend bool operator== (Number &n1, Number &n2) { return n1.isEqual(n2); } virtual bool isEqual(Number &n) { return false; } const NumberType type; };``````

Now, so far I only have Bdouble and Bint, so please take a look at how I handle Bdouble's isEqual function.

 ``1234567891011121314`` ``````bool Bdouble::isEqual(Number &n) { switch (n.type) { case NumberType::Bdouble: { Bdouble *nPtr = (Bdouble*)&n; return Value ==Ptr->Value; } case NumberType::Bint: { Bint *nPtr = (Bint*)&n; return Value == (int)*nPtr; // int () typecast defined in Bint } } }``````

Now, I'm realizing that I will need a similar case structure for Bint. Also, every time I add a function, (and for Matlab level functionality I will need to add a LOT), I will be dealing with such case structures. Are there better ways to make classes deriving from the same base class play well together? Would a different approach altogether make sense in this case?

Any advice will be appreciated, thank you!

*edit: make some syntactical corrections to the code, and fixed where i had pasted the wrong function
Last edited on
Perhaps I should add that eventually I would like to add classes for Complex, Vector and Matrix, which all would derive from Number. Then the inputs and outputs to functions like operator+ could return scalar or vector or matrix values depending on the the operands.
Topic archived. No new replies allowed.