Я хочу закодировать программу, которая реализует базовый класс и производный от него. Мне нужно выполнить поток в базовом классе, который вызывает чистую виртуальную функцию, реализованную в производном классе.
Когда я компилирую и выполняю программу, вместо нее вызывается Base::func()
Derivated::func()
, и мой сбой программыпотому что он не может выполнять чисто виртуальную функцию. Что мне нужно сделать, чтобы выполнить производную функцию.
Примечание: Может существовать несколько производных классов, поэтому я не могу явно использовать Derivated::func()
.
class Base {
private:
std::thread *t = NULL;
virtual void func() = 0;
public:
void foo() {
std::cout << "Base::foo() executed" << std::endl;
this->t = new std::thread([this]() {
while (true) {
func();
}
});
}
};
class Derivated : public Base {
public:
void func() {
std::cout << "Derivated::func() executed" << std::endl;
}
};
int main() {
Derivated d;
d.foo();
}
Я ожидаю этот результат:
Base::foo() executed
Derivated::func() executed
Derivated::func() executed
Derivated::func() executed
Derivated::func() executed
Derivated::func() executed
...
Но это выглядит так:
Base::foo() executed
pure virtual method called
terminate called without an active exception
Aborted