在 class 中重载 operator+
Overloading operator+ in class
假设我有一个 class 号码
class Number
{
public:
int numb;
Number (int g)
{
numb = g;
}
int operator+(int h)
{
return this->numb+h;
}
};
当我尝试使用重载运算符时
cout << 3 + s; // doesn't work
cout << s + 3;
我明白为什么它不起作用,但我不知道如何让它在 3 + s
上起作用
当然,我可以在 class 之外编写带有 2 个参数的 operator+,但我想让我的运算符在 class 中重载。
我用谷歌搜索了它,但没有找到任何解决方案。
只需在 class 之外写一个运算符,调用 class 中的运算符!
template<typename T> T operator+(T a, Number& n)
{
return n+a;
}
最简单的方法:在 class
之外编写另一个重载
class Number
{
public:
int numb;
Number (int g)
{
numb = g;
}
int operator+(int h)
{
return this->numb+h;
}
};
int operator+(int h, Number& n)
{
return n.numb+h;
}
int main()
{
int s = 42;
std::cout << 3 + s;
std::cout << s + 3;
}
如果您的数据是私有的,这也有效(但要确保外部函数可以访问这些成员)
class Number
{
int numb;
public:
Number (int g)
{
numb = g;
}
int operator+(int h)
{
return this->numb+h;
}
friend int operator+(int, Number&);
};
int operator+(int h, Number& n)
{
return n.numb+h;
}
Of course, I can write operator+ with 2 arguments outside the class, but I want to have my operator overloaded in the class.
这就像在说"Of course I could hammer in my nail with a hammer, but I want to use a screwdriver..."
其他一些解决方案建议同时使用会员和非会员,但这是多余的:如果您添加了非会员,那么您就不再需要会员了!
重载operator+
的proper way就是使用非成员:
Number operator+(Number a, Number b)
{
return a.numb + b.numb;
}
另一种写法是使用 operator+=
作为助手(然后你的 class 也将支持 +=
):
Number operator+(Number a, Number b)
{
return a += b;
}
成员函数:
Number &operator+=(Number b)
{
numb += b.numb;
return *this;
}
您可以选择 operator+
return Number
或 int
。
假设我有一个 class 号码
class Number
{
public:
int numb;
Number (int g)
{
numb = g;
}
int operator+(int h)
{
return this->numb+h;
}
};
当我尝试使用重载运算符时
cout << 3 + s; // doesn't work
cout << s + 3;
我明白为什么它不起作用,但我不知道如何让它在 3 + s
当然,我可以在 class 之外编写带有 2 个参数的 operator+,但我想让我的运算符在 class 中重载。
我用谷歌搜索了它,但没有找到任何解决方案。
只需在 class 之外写一个运算符,调用 class 中的运算符!
template<typename T> T operator+(T a, Number& n)
{
return n+a;
}
最简单的方法:在 class
之外编写另一个重载class Number
{
public:
int numb;
Number (int g)
{
numb = g;
}
int operator+(int h)
{
return this->numb+h;
}
};
int operator+(int h, Number& n)
{
return n.numb+h;
}
int main()
{
int s = 42;
std::cout << 3 + s;
std::cout << s + 3;
}
如果您的数据是私有的,这也有效(但要确保外部函数可以访问这些成员)
class Number
{
int numb;
public:
Number (int g)
{
numb = g;
}
int operator+(int h)
{
return this->numb+h;
}
friend int operator+(int, Number&);
};
int operator+(int h, Number& n)
{
return n.numb+h;
}
Of course, I can write operator+ with 2 arguments outside the class, but I want to have my operator overloaded in the class.
这就像在说"Of course I could hammer in my nail with a hammer, but I want to use a screwdriver..."
其他一些解决方案建议同时使用会员和非会员,但这是多余的:如果您添加了非会员,那么您就不再需要会员了!
重载operator+
的proper way就是使用非成员:
Number operator+(Number a, Number b)
{
return a.numb + b.numb;
}
另一种写法是使用 operator+=
作为助手(然后你的 class 也将支持 +=
):
Number operator+(Number a, Number b)
{
return a += b;
}
成员函数:
Number &operator+=(Number b)
{
numb += b.numb;
return *this;
}
您可以选择 operator+
return Number
或 int
。