Re: The best match for an operator
"Vladimir Grigoriev" <vlad.moscow@mail.ru> ha scritto nel messaggio
news:u9vpABAvIHA.2064@TK2MSFTNGP05.phx.gbl...
class Complex_
{
public:
[...]
Complex_( double theReal, double theImage = 0.0 ):
I would define this constructor as explicit.
IMHO, having implicit construction may lead to some subtle bugs, especially
in some complicated codes (where unexpected conversions happen
implicitly)...
const Complex_ operator+( double d )
{
return Complex_( real + d );
}
const Complex_ operator+(const Complex_& lhs, const Complex_& rhs)
{
return Complex_( lhs )+= rhs;
}
Could anyone please explain me why the return value is qualified as 'const'?
(I'm not criticising, I'm just sincerely curious.)
I would just write:
/* no const */ Complex_ operator+( ... )
What am I missing here?
Thanks.
std::cout << "c1.real = " << c1.real << ", c1.image = " << c1.image <<
std::endl;
std::cout << "c2.real = " << c2.real << ", c2.image = " << c2.image <<
std::endl;
std::cout << "c3.real = " << c3.real << ", c3.image = " << c3.image <<
std::endl;
In cases like this, you may define an overload of operator << with C++
output streams, to make printing of your Complex_ class instances easier,
e.g.
std::ostream & operator<<( std::ostream & os, const _Complex & c )
{
os << "[ " << c.real << ", " << c.image << " ]";
return os;
}
and so you can just write:
// Complex_ c1, c2
std::cout << "c1 = " << c1 << std::endl;
std::cout << "c2 = " << c2 << std::endl;
std::cout << "c1 + c2 = " << (c1 + c2) << std::endl;
Giovanni