我想对类中的运算符<<
使用重载操作。我知道如何在两个类之间执行此操作:
class output
{
public:
string x;
output (string a) : x(a) {}
output () {}
output operator<< (const output&);
};
output output::operator<< (const output& a)
{
/* return something that has to do with a.x and x, to make an operation */
}
当使用x = y << z
时,如果所有属于同一类,并且operation-overload函数返回合适的值,则此方法有效。但是,问题是,我希望操作的一部分是一个字符串(所以基本上,x
和y
将具有类型output
和z
输入string
)。我希望这会奏效:
output output::operator<< (const string& a)
......但事实并非如此。所以我开始怀疑我要么误解整个事情的使用,要么我只是想做一些根本没有意义的事情......我试过了一下,但是找不到任何东西。但如果是这样,我究竟误解了什么?有没有其他方法可以达到我想要的目的?
非常感谢帮助。
答案 0 :(得分:1)
您可以将运算符重载声明为非成员函数。这将允许您指定左侧和右侧操作数类型。
output & operator << (output &lhs, const string &rhs)
{
// do something with lhs and rhs
return lhs;
}
对于这种运算符,我怀疑你也希望通过引用返回output
对象(尽管这完全取决于你正在做什么)。