From: Dave Abrahams (abrahams_at_[hidden])
Date: 1999-12-10 23:58:10


Ed Brey wrote:
> "Moore, Paul" wrote:
>>
>> Here is the complete version of my rational numbers class. I believe that it
>> now covers everything which has been discussed here, as well as including
>> some documentation. The supplied "example.cpp" doubles as sample code and a
>> simple test case.

Good job; I know this will be useful!

> First, one interface issue:
>
> Should there be an assign function, similar to what std::string has.
> This would allow you to reassign a rational without creating a
> temporary. For example, in the read from stream operator, code would
> change from
> r = rational<Int>(n, d);
> to
> r.assign(n, d);

I don't think this would hurt.

> 2. The destructor defined in bad_rational is superfluous. As an
> example, std::domain_error defines no destructor.

But what's really missing is an implementation of the what() function!

> 3. Of the base classes of rational, only less_than_comparable is
> public; all others are private.

I would like to point out once again that it would be OK to make all of
these base classes private. In fact, it makes the code quite a bit cleaner.
There's no question of inheriting public interface from them.

Also,

This is surely illegal, no?
#ifdef BOOST_NO_STDC_NAMESPACE
    namespace std { using ::abs; }
#endif

On formatting:
I would like to see all inline functions removed from the class body; it
makes the interface so much clearer, and there'd be room for (gasp!)
comments.

I'd also like to see a blank line between member functions.

I'd also *really* like to see the class start with its public interface
instead of its private data members.

Regards,
Dave