Well, it does depend on what behaviour you provide. For example, Complex might have a member function to get the imaginary portion. That does not make sense for a Real. On the other hand, you could say that Real objects do have an imaginary portion that is 0... but then what's the point of a Real class when Complex will do?This holds for all 'Real' objects when derived from 'Complex' : conjugate( x), imag( x), real( x) and so forth.

I think the decision on whether to keep everything to Complex or have both Real and Complex depends on your set of vector spaces thing that you are trying to model. If you can model that with just Complex, then it would be simpler (heh, what irony) to just use Complex.