/ * 好吧,我一直在努力研究这种多态性。现在,hourly_worker的计算工资实现看起来像这样
hourly_worker::compute_pay()
{
tot_sal = hrs_wrk * hourly;
return tot_sal;
}
我希望这返回$ 2000.00,但是现在它只返回$ 2000,因为该函数设置为虚拟返回类型而不是double。无论如何在不改变虚函数的情况下获得这些小数点?谢谢你们
* / 现在这是我的驱动程序文件:http://pastebin.com/hUYhxVEu 和tot_sal是Worker的私有双数据成员,compute_pay是Worker的公共虚函数,由每个子类继承。请帮助哈哈。如果您需要/想要查看更多代码,请告诉我。另外,这是hourly_worker的实现文件。 http://pastebin.com/CtjiZUCG只是添加,setprecision&固定或showpoint对返回值不做该死的事。
答案 0 :(得分:0)
你的函数没有virtual
返回类型,它是virtual
,这意味着当从指针或引用调用函数时,对象的实际类型的函数将被调用,而不是指针类型。
如果不放置返回类型,一些不符合C ++标准的编译器将使用int
作为默认值(因为这在C中就是这种情况)。如果您在复制/粘贴代码时没有截断代码,那么可能就是您的情况。因此,您的函数返回int
。如果您希望它返回double
,只需更改其签名:
virtual double hourly_worker::compute_day();
现在,当然,只有当hourly
和/或hrs_wrk
为double
时才会有用。否则,结果将是int
,并且只需格式化显示就可以添加.00。
正如评论中所讨论的,您可能更喜欢固定点算术而不是浮点运算来进行计算。这个想法很简单:使用int
(或long int
能够处理亿万富翁)并将所有值乘以1000(或更多取决于您想要处理的最小金额,我不是专家,但我认为十分之一通常是使用的。)