Я пытаюсь преобразовать некоторый код 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()
метод в базовом классе. Вроде нет тела и ничего не возвращает. Как это работает? Это совершенно лишнее, как оно есть?
2: Второй factorMarginal()
метод в производном классе. Является ли это по сравнению с базовым фактором. Кроме того, последняя строка в этом методе называется сама (без скобок), и я не понимаю, что это делает. Он называется базовым классом factorMarginal или реализует какую-то рекурсию?
factorMarginal
Метод в базовом классе является абстрактным. В C ++ вы бы сделали его чисто виртуальным:
virtual Factor factorMarginal() = 0;
Да, factorMarginal
Метод в производном классе переопределяет метод в базовом классе. В C ++ вы бы написали это следующим образом:
virtual Factor factorMarginal() override {
auto const inMsg = gate.getEndGate().getMessage();
return factor * inMsg;
}
Последняя строка не вызывает сам метод, но возвращает локальную переменную с тем же именем.
Обязательно сделайте методы const
в C ++, если это имеет смысл.
Обратите внимание, что нет эквивалента C ++ для Scala sealed
,
Других решений пока нет …