繁体   English   中英

C ++运算符+ =重载

[英]C++ Operator += overload

我想重载运算符+ =,以便我将在使用它时使用a + = b; 它将在向量a中添加b到标头中:

public:
...
void Book::operator+=(std::string a, std::vector<std::string>>b);
private:
...
    std::string b;
    stf::vector<std::string> a;

这是cpp中的实现

void Book::operator+=(std::string a, std::vector<std::string>>b)
{
b.push_back(a);
}

我的错误是什么? 对我来说还不清楚使用重载运算符

您可以使用成员函数或非成员函数重载+=运算符。

当它是成员函数时,运算符的LHS是将在其上调用该函数的对象,而运算符的RHS是该函数的参数。 因此,成员函数的唯一参数将是RHS。

就您而言,您有两个参数。 因此,这是错误的。 您可以使用:

void operator+=(std::string a);
void operator+=(std::vector<std::string>>b);

或类似的情况,成员函数中只有一个参数。

顺便说一句,您不需要使用void Book::operator+= ,只需使用void operator+=

另外,使用起来更惯用

Book& operator+=(std::string const& a);
Book& operator+=(std::vector<std::string>> const& b);

第一个的实现可能是:

Book& operator+=(std::string const& aNew)
{
   b.push_back(aNew);
   return *this;
}

第二个可能是:

Book& operator+=(std::vector<std::string>> const& bNew);
{
   b.insert(b.end(), bNew.begin(), bNew.end());
   return *this;
}

有关这些操作的详细信息,请参见std :: vector文档

PS不要将成员变量ab与同名的输入参数混淆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM