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-
explicitconstructor callable with one argument. In your code sample, as theComplexconstructor provides default values for its parameters, it can be called with a single argument (say3.0). And since such constructor is not markedexplicit, then it is a valid conversion constructor.When you do
com1 == 3.0–given that there is nooperator ==betweenComplexanddouble— a conversion constructor is invoked. So your code is equivalent to this: