class Complex
{
private:
double real;
double imag;
public:
// Default constructor
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
// A method to compare to Complex numbers
bool operator == (Complex rhs) {
return (real == rhs.real && imag == rhs.imag)? true : false;
}
};
int main()
{
// a Complex object
Complex com1(3.0, 0.0);
if (com1 == 3.0)
cout << "Same";
else
cout << "Not Same";
return 0;
}
Output: Same
Why this code gives output as Same, how the conversion constructor in working here, please explain, Many many thanks in advance
A conversion constructor is any non-explicit
constructor callable with one argument. In your code sample, as the Complex
constructor provides default values for its parameters, it can be called with a single argument (say 3.0
). And since such constructor is not marked explicit
, then it is a valid conversion constructor.
When you do com1 == 3.0
--given that there is no operator ==
between Complex
and double
-- a conversion constructor is invoked. So your code is equivalent to this:
if( com1 == Complex(3.0) )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With