Re: Why "const rect& rhs" is used here?
Jacky Luk wrote:
class rect
{
friend ostream& operator<<(ostream& os, const rect& rhs);
public:
rect (int w, int h) : _w(w), _h(h)
{ _area = _w * _h; }
bool operator < (const rect& rhs) const <<<< this one
{ return _area < rhs._area; }
private:
int _w, _h, _area;
};
=========
how come (const rect& rhs) is used
as far as i can see, the rhs is not mututed inside operator < and not
neccessary to be called by reference because rhs will never be changed.
You would pass a non-const reference instead? In that case, it is (by
convention, rather than by language rules) a sign that something will be
modified inside the function.
The other alternative would be to pass by value, which then generates an
(sometimes unnecessary) copy. In this case it won't matter much.
And how come the operator function needs to be declared as const (on
the end of the line), as far as i can see, i also don't see why there
is a need for that... Any comments?
It's a promise that the left side of the comparison is also not modified.
BTW: those are C++ basics, so I suggest you get a good book on the topic
(see http://accu.org for book reviews) and reading e.g. the FAQ at
parashift.com.
Lastly: you can (and often should!) implement operators as free functions:
bool operator<( rect const& r1, rect const& r2)
{
return r1.area() < r2.area();
}
Of course this requires access to the area via a public interface or that
the operator is made a friend (like with operator<< above).
Uli