【发布时间】:2014-06-29 18:41:58
【问题描述】:
您好,我正在尝试为原始类型创建类似包装类的东西,但我被困在这个问题上:
当我尝试创建接口并能够对后代使用多态性时
编辑
我来了
function returning abstract class "Var" is not allowed:
function "Var::operator+" is a pure virtual
function function "Var::operator-" is a pure virtual function
function "Var::operator*" is a pure virtual function
function "Var::operator/" is a pure virtual function
这是我的代码
class Var
{
public:
Var() { }
virtual Var operator+(Var b) = 0;
virtual Var operator-(Var b) = 0;
virtual Var operator*(Var b) = 0;
virtual Var operator/(Var b) = 0;
};
class Decimal : public Var
{
public:
Decimal(double a) { value = a; }
Decimal() : Decimal(0) { };
virtual Decimal operator+( Decimal b)
{
return value + b.value;
}
virtual Decimal operator-( Decimal b)
{
return value - b.value;
}
virtual Decimal operator*( Decimal b)
{
return value * b.value;
}
virtual Decimal operator/( Decimal b)
{
return value / b.value;
}
Decimal operator=(double val)
{
value = val;
}
private:
double value;
};
我的问题有什么解决办法吗?
【问题讨论】:
-
“大量错误”对你想帮助你的人没有帮助。
-
为了覆盖基类的函数,成员函数必须与参数列表完全匹配并且具有协变返回类型。
-
另外,
value + b.value等会生成Var,但您的返回类型(当前)是Decimal,因此必须进行从Var到Decimal的转换(但添加一个是一个相当糟糕的主意)。 -
参数类型需要相同。试试
const Var&,否则你传递了一个Var的副本,Var不能被实例化。 -
@nikolap 像往常一样,您被要求发送至add such information to your question。请这样做,在 cmets 中它并不是真的有用(考虑不存在的信息)。
标签: c++ operator-overloading pure-virtual