gpt4 book ai didi

c++ - 理解这个 Scala 代码

转载 作者:行者123 更新时间:2023-11-30 02:48:40 25 4
gpt4 key购买 nike

我正在尝试将一些 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() 方法。是超越基本 factorMarginal 方法。此外,此方法的最后一行调用了自身(没有任何括号),我对它的作用感到困惑。它是称为基类 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++。

关于c++ - 理解这个 Scala 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com