我正在尝试将一些Scala代码转换为C++,这是我第一次接触Scala,并且在某些代码方面遇到了麻烦。因此,我有一个基类如下:
sealed abstract class FactorNode(factor: Factor) extends Node {
private var _factor: Factor = factor
def factorMarginal(): Factor
}
现在,我有一个派生类,如下所示:
case class SingleFactorNode(factor: SingleFactor, gate: FactorGate) extends FactorNode(factor) {
def factorMarginal(): Factor = {
val inMsg = gate.getEndGate().getMessage()
val factorMarginal = factor * inMsg
factorMarginal
}
}
几个问题:1:基类中的
factorMarginal()
方法。它似乎没有 body ,什么也没返回。这是如何运作的?它的样子完全多余吗?2:第二个派生类中的
factorMarginal()
方法。是过度骑乘的基本因素Marginal方法。另外,此方法的最后一行称为自身(没有任何括号),我对此感到困惑。它称为基类factorMarginal还是实现某种递归? 最佳答案
基类中的factorMarginal
方法是抽象的。在C++中,您将使其成为纯虚拟的:
virtual Factor factorMarginal() = 0;
是的,派生类中的
factorMarginal
方法将覆盖基类中的方法。在C++中,您可以这样编写:virtual Factor factorMarginal() override {
auto const inMsg = gate.getEndGate().getMessage();
return factor * inMsg;
}
最后一行并没有调用方法本身,而是返回具有相同名称的局部变量。
如果可以的话,请确保在C++中使用
const
方法。请注意,Scala的
sealed
没有C++等效项。