4
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;
}

输出:相同

为什么这段代码给出的输出相同,转换构造函数如何在这里工作,请解释一下,非常感谢提前

4

2 回答 2

11

转换构造函数是可以explicit使用一个参数调用的任何非构造函数。在您的代码示例中,由于Complex构造函数为其参数提供默认值,因此可以使用单个参数(例如3.0)调用它。并且由于这样的构造函数没有被标记explicit,那么它是一个有效的转换构造函数。

当你这样做时——com1 == 3.0假设没有operator ==介于Complexdouble——一个转换构造函数被调用。所以你的代码相当于这个:

if( com1 == Complex(3.0) )
于 2012-06-05T22:29:34.953 回答
1

在您的示例中,编译器看到在对象==上使用的运算符complex并试图找到一种使其工作的方法。只有一个operator==,它需要一个complex论点。由于有一个complex构造函数接受 double 且未标记explicit,因此它使用它来生成一个临时complex对象,然后将其传递给operator==.

于 2012-06-05T22:33:53.923 回答