Ecl*_*pse 7 c++ operator-overloading
是否有规范或推荐的模式用于在类似C++的类中实现算术运算符重载?
从C++ FAQ中,我们有一个异常安全的赋值运算符,可以避免大多数问题:
class NumberImpl;
class Number {
NumberImpl *Impl;
...
};
Number& Number::operator=(const Number &rhs)
{
NumberImpl* tmp = new NumberImpl(*rhs.Impl);
delete Impl;
Impl = tmp;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
但对于其他运算符(+,+ =等等),除了使它们的行为类似于内置类型的运算符之外,给出的建议很少.
有没有一种标准的方法来定义这些?这就是我想出来的 - 我有没有看到陷阱?
// Member operator
Number& Number::operator+= (const Number &rhs)
{
Impl->Value += rhs.Impl->Value; // Obviously this is more complicated
return *this;
}
// Non-member non-friend addition operator
Number operator+(Number lhs, const Number &rhs)
{
return lhs += rhs;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2660 次 |
最近记录: |