我们说我有一个班级编号
using (var DB = new JodoDataEntities())
{
await DB.Database.SqlQuery<Task>("EXEC UpdateLocation {0}, {1}, {2}", userInfo.UserId, userInfo.Accuracy, userInfo.IsOnline).ToArrayAsync();
}
当我尝试使用我的重载运算符
时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;
当然,我可以在类外面编写带有2个参数的operator +,但是我希望我的运算符在类中重载。
我用谷歌搜索了它,但没有找到任何解决方案。
答案 0 :(得分:1)
最简单的方法:在课堂外写另一个重载
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;
}
答案 1 :(得分:1)
当然,我可以在类外面编写带有2个参数的operator +,但是我希望我的操作符在类中重载。
这就像说&#34;当然我可以用锤子锤击我的钉子,但我想用螺丝刀......&#34;
其他一些解决方案建议同时使用成员和非成员,但这是多余的:如果您添加非成员,则不再需要该成员!
重载operator+
的{{3}}是使用非成员:
Number operator+(Number a, Number b)
{
return a.numb + b.numb;
}
另一种写这种方法的方法是使用operator+=
作为助手(那么你的班级也会支持+=
):
Number operator+(Number a, Number b)
{
return a += b;
}
使用成员函数:
Number &operator+=(Number b)
{
numb += b.numb;
return *this;
}
您可以选择operator+
返回Number
或int
。
答案 2 :(得分:0)
只需在班级外面编写一个操作员来调用班级中的操作员!
template<typename T> T operator+(T a, Number& n)
{
return n+a;
}