[英]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不要将成员变量a
和b
与同名的输入参数混淆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.