抽象运算符+?

3 c++ abstract-class operator-overloading

我上课了:

class base
{
public :
 base & operator +=(const int value) = 0;
 // base operator + (const int val) = 0; // HOW DO I DO THIS ?
};
Run Code Online (Sandbox Code Playgroud)

还有一个源自它的子类

class derived : public base
{
public :
 derived() : m_val(0) {}
 derived(const derived & val) : m_val(val.m_val) {}
 base & operator = (const derived& value) // POSSIBLE TO RETURN A REFERENCE TO BASE
 { m_val = value.m_val; return *this; }
 base & operator +=(const int val)
 { m_val += val; return *this; }
 /* operator + overload here */
 // base operator + (...) // IMPOSSIBLE TO RETURN A VALUE
protected :
int m_val;
};
Run Code Online (Sandbox Code Playgroud)

我真的需要在基类中定义一个operator + - 同时需要保持抽象.我发现很难实现,因为典型的operator +返回一个值,而抽象类无法实例化 - 所以我发现自己处于一个陷阱#22的情况.有没有一个有效的解决方案?

问候

小智 10

运算符+()应该几乎总是作为一个自由函数实现,因此不需要在base中声明它是虚拟的(你没有做,但必须避免语法错误).

基本上,你的设计是错误的 - 如果你需要某种操作符+() - 类似于操作符+()的合理实现无法提供的行为,请使用命名成员函数而不是operator +().

  • 总结:动态多态性和按值传递或返回不混合. (4认同)