【发布时间】:2021-09-16 06:16:01
【问题描述】:
#include <iostream>
using namespace std;
class Complex
{
private:
double real;
double imag;
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
bool operator == (Complex rhs) {
return (real == rhs.real && imag == rhs.imag)? true : false;
}
};
int main()
{
Complex com1(3.0, 0.0);
if (com1 == 3.0)
cout << "Same";
else
cout << "Not Same";
return 0;
}
这里,
if (com1 == 3.0)
我们将 3.0 传递给 Complex 类的对象 rhs,但这怎么可能呢?一个对象不能只有一个值,不是吗?
另外,如果 rhs = 3.0 是不可能的,那么可能会调用 Complex 类的构造函数,但这里的构造函数需要两个参数,而我们只传递一个参数??
【问题讨论】:
-
operator ==应该是const。return cond ? true : false;可能只是return cond;。 -
您认为
i = 0.0位做了什么?当默认参数在构造函数以外的函数中使用时,你能识别它们吗? -
@Useless 哦,我现在明白了,是的,现在我认识到 img = 0.0 很抱歉没有看到,但如果 img = 0.0 不存在,这会给我一个错误正确的?因为没有为 img 初始化任何值。
-
如果构造函数参数(嗯,第二个)没有默认,那么这个构造函数就没有资格将双精度
3.0转换为临时Complex{d, 0.0},没错。跨度>