我有一个C ++类,我希望使用pImpl指针隐藏它的实现。大部分工作已经完成,除了运营商之外,其他一切都没问题' + ='它返回同一个类的对象。该运算符函数必须在类中。问题在于,当构成一个抽象类时,没有任何成员函数可以返回该类的对象,因此' + ='是不允许的。
我正在寻求有关处理此限制的建议。我更喜欢一种不需要更改使用此类的现有代码的方法。如果这种方式不存在,还能做些什么呢?
这是我希望摘要的类的简化版本:
class AClass
{
public:
AClass( int x0, int y0);
~AClass(void);
void operator=(const AClass &A2);
AClass operator+(const AClass &A2);
void operator+=(const AClass &A2);
protected;
int x;
int y;
};
AClass AClass::operator+(const AClass &A2) { AClass AOut(A2); AOut += A2; return AOut; }
AClass AClass::operator+=(const AClass &A2) { this->x += A2.x; this->y += A2.y; }
// 'operator+' is necessary to perform the following operation on AClass objects. i.e.
A = B + C;
// 'operator+=' is necessary to perform the following operation on AClass objects. i.e.
A += B;
答案 0 :(得分:3)
EXCEPT用于运算符'+ =',它返回同一类的对象
$query = "INSERT IGNORE INTO table (id) VALUES (?)";
$doQuery = DB::insert($query, array($value));
if ($doQuery) {
return DB::getPdo()->last();
} else {
return 0;
}
(以及其他赋值运算符)需要返回operator+=
而不是AClass&
。
参见例如Scott Meyers “Effective C ++” 第10项:
让赋值运算符返回对
的引用AClass
这样可以避免按值返回类的问题,并使代码更接近C ++指南。
P.S。但*this
似乎不是唯一的一点。例如,operator+=
具有相同的问题,不应返回引用。所以你可以认为这篇文章是问题的字面答案,但不是问题的解决方案。