Perhaps this is going to cost me rep points, but I disagree. Don't modify the expected return types of overloaded operators as it will annoy users of your class. i.e. use
Rational operator*(const Rational& lhs, const Rational& rhs);
(Of course, consting the parameters is good practice, and having constant reference parameters is even better as it means the compiler will not take deep copies. But don't have a constant reference return value in this case though as you'll get a dangling reference which is catastrophic. But do note that sometimes, taking a reference is slower than a pass by value. I think that doubles and ints come into that category on many platforms.)