重载加号运算符的正确方法是什么?
What is the right way to overload the plus operator?
我有一套类:
class A
{
public:
A(B b) {//..}
A(C C) {//..}
A(D D) {//..}
A& operator+=(A const& ls) {//..}
A operator+(A const& ls) const {//..}
}
class B
{
//....
}
class C
{
//....
}
class D
{
//....
}
我要支持以下操作:
1) A result = a1 + a2;
2) a1 += a2;
3) A result = b1 + a1; (and C, D classes instead of B)
4) A result = a1 + b1; (and C, D classes instead of B)
5) a1 += b1; (and C, D classes instead of B)
遇到这种情况怎么办?我不想使用 boost
.
您缺少的是 B
、C
和 D
到 A
的隐式转换,用于 operator+
的 LHS。您可以通过使运算符成为非成员函数来允许这样做。例如:
A operator+(A const& ls, A const& rs)
{
A ret = ls;
ret += rs;
return ret;
}
我有一套类:
class A
{
public:
A(B b) {//..}
A(C C) {//..}
A(D D) {//..}
A& operator+=(A const& ls) {//..}
A operator+(A const& ls) const {//..}
}
class B
{
//....
}
class C
{
//....
}
class D
{
//....
}
我要支持以下操作:
1) A result = a1 + a2;
2) a1 += a2;
3) A result = b1 + a1; (and C, D classes instead of B)
4) A result = a1 + b1; (and C, D classes instead of B)
5) a1 += b1; (and C, D classes instead of B)
遇到这种情况怎么办?我不想使用 boost
.
您缺少的是 B
、C
和 D
到 A
的隐式转换,用于 operator+
的 LHS。您可以通过使运算符成为非成员函数来允许这样做。例如:
A operator+(A const& ls, A const& rs)
{
A ret = ls;
ret += rs;
return ret;
}