Вам не хватает банды с искровым ульем.
Например, если вы работаете на Scala 2.11 с помощью Spark 2.1, вы можете использовать эту банку.
https://mvnrepository.com/artifact/org.apache.spark/spark-hive_2.11/2.1.0
Вам нужно сделать вашу функцию виртуальной, чтобы a()
всегда ссылался на реализацию a()
в реальном классе объекта:
class A {
public:
virtual int a() { //<<<<<<<<--------
return 6;
}
int b() {
return a() - 2;
}
virtual ~A() = default;
};
В вашей версии с не виртуальной функцией тело b()
называет единственный a()
, который он знает, который является A::a()
.
В качестве хорошей практики и во избежание неприятных ошибок, когда вы определяете виртуальную функцию, укажите в производных классах, что вы переопределяете виртуальную функцию: предвидеть виртуальный деструктор в базовом классе.