【发布时间】:2015-04-04 20:00:28
【问题描述】:
我今天注意到了一些事情。如果我创建三个版本的重载 + 运算符来处理每个组合(对象 + 原始、原始 + 对象、对象 + 对象),一切都会按预期执行:
class Int
{ int data;
public:
Int (){data = 0; };
Int (int size){ data = size; };
friend int operator+(Int, Int);
friend int operator+(int, Int);
friend int operator+(Int, int);
};
int operator+(Int lInt, Int rInt)
{ cout <<"first version. ";
return rInt.data + lInt.data;
}
int operator+(int lInt, Int rInt)
{ cout <<"second version. ";
return rInt.data + lInt;
}
int operator+(Int lInt, int rInt)
{ cout <<"third version. ";
return lInt.data + rInt;
}
int main(int argc, char *argv[]) {
Int int1 = 1;
cout << int1 + int1 <<endl; // prints "first version. 2"
cout << 3 + int1 << endl; // prints "second version. 4"
cout << int1 + 3 << endl; // prints "third version. 4"
}
但如果我删除第二个和第三个版本它仍然有效!?!
class Int
{ int data;
public:
Int (){data = 0; };
Int (int size){ data = size; };
friend int operator+(Int, Int);
};
int operator+(Int lInt, Int rInt)
{ cout <<"first version. ";
return rInt.data + lInt.data;
}
int main(int argc, char *argv[]) {
Int int1 = 1;
cout << int1 + int1 <<endl; // prints "first version. 2"
cout << 3 + int1 << endl; // prints "first version. 4"
cout << int1 + 3 << endl; // prints "first version. 4"
}
我的重载 + 运算符是如何接受两个对象的,它能够接受一个 int 和一个对象。它如何能够获取对象和整数?我希望我不会在这里忽略一些愚蠢的明显的东西!
【问题讨论】:
标签: c++ operator-overloading implicit-conversion