Унаследованная функция с использованием дочерней функции

Вам не хватает банды с искровым ульем.

Например, если вы работаете на Scala 2.11 с помощью Spark 2.1, вы можете использовать эту банку.

https://mvnrepository.com/artifact/org.apache.spark/spark-hive_2.11/2.1.0

1
задан Christophe 24 March 2019 в 23:21
поделиться

1 ответ

Вам нужно сделать вашу функцию виртуальной, чтобы a() всегда ссылался на реализацию a() в реальном классе объекта:

class A {
    public:
    virtual int a() {         //<<<<<<<<--------
        return 6;
    }
    int b() {
        return a() - 2;
    }
    virtual ~A() = default;  
};

В вашей версии с не виртуальной функцией тело b() называет единственный a(), который он знает, который является A::a().

В качестве хорошей практики и во избежание неприятных ошибок, когда вы определяете виртуальную функцию, укажите в производных классах, что вы переопределяете виртуальную функцию: предвидеть виртуальный деструктор в базовом классе.

0
ответ дан Christophe 24 March 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: