Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the conversion constructors

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

like image 561
Luv Avatar asked Dec 15 '22 23:12

Luv


1 Answers

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) )
like image 197
K-ballo Avatar answered Jan 01 '23 02:01

K-ballo