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 +().