类和字符串之间的重载操作

Overloaded operation between class and string

本文关键字:重载 操作 之间 字符串      更新时间:2023-10-16

我想对类中的运算符<<使用重载操作。我知道如何在两个类之间执行此操作:

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 时有效,如果所有 都属于同一类,并且如果操作重载函数返回合适的值。但是,问题是,我希望操作的一部分是字符串(所以基本上,xy 将具有类型 output ,并且z类型 string (。我希望这会起作用:

output output::operator<< (const string& a)  

。但事实并非如此。所以我开始怀疑我要么误解了整个事情的用途,要么我只是想做一些根本没有意义的事情......我尝试搜索了一下,但找不到任何东西。但如果是这样,我到底误解了什么?还有没有其他方法可以实现我想要的?
帮助将不胜感激。

可以将运算符重载声明为非成员函数。这将允许您指定左侧和右侧操作数类型。

output & operator << (output &lhs, const string &rhs)
{
    // do something with lhs and rhs
    return lhs;
}

对于这种运算符,我怀疑您还希望通过引用返回output对象(尽管这完全取决于您对它执行的操作(。