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;
}
输出: 相同
为什么这段代码输出为Same,转换构造函数如何在这里工作,请解释一下,非常感谢提前
答案 0 :(得分:10)
转换构造函数是任何可用一个参数调用的非explicit
构造函数。在您的代码示例中,由于Complex
构造函数为其参数提供了默认值,因此可以使用单个参数(例如3.0
)调用它。由于此类构造函数未标记为explicit
,因此它是一个有效的转换构造函数。
当您com1 == 3.0
- operator ==
和Complex
之间没有double
时,会调用转换构造函数。所以你的代码等同于:
if( com1 == Complex(3.0) )
答案 1 :(得分:1)
在您的示例中,编译器看到==
对象上使用的complex
运算符,并尝试找到使其工作的方法。只有一个operator==
,它需要一个complex
参数。由于complex
构造函数采用double并且未标记为explicit
,因此它使用该构造函数生成临时complex
对象,然后将其传递给operator==
。