为class重载运算符时出现的一些疑惑
#include <iostream>
using namespace std;
class Vector{
private:
double x;
double y;
public:
Vector(double a = 0, double b = 0): x{a}, y{b} {}
void print();
double getx() const {return x;}
double gety() const {return y;}
};
void Vector::print() {
cout << "(" << x << "," << y << ")" << endl;
}
Vector operator+(const Vector& v1, const Vector& v2) {
return Vector(v1.getx()+v2.getx(), v1.gety()+v2.gety());
}
以上代码创建了向量这种变量,并重载运算符+为向量加法
但是进行数字+向量 / 向量+数字的加法时,仍然可以调用只重载了向量+向量的加法运算
比如:
int main() {
Vector u(1,2), v;
v = u+3;
v.print(); // 输出是:(4,2)
return 0;
}
按理来说不应该会由于没有匹配的运算符而报错吗?为什么能正常运行呢?
希望得到解释,提前谢谢答者!
补:漏了一个关键信息,非常对不起。在我给构造函数加上默认值之前是会报错的,但是加上默认值之后就能正常运行了。