Вопрос по перегрузке оператора в ООП С++
Есть такой код
class CustomFoo {
virtual void do_stuff()=0;
};
class Foo: CustomFoo {
void do_staff() {....} final;
};
class FooWrapper {
vector<CustomFoo*> foos;
CustomFoo* operator->() {return foo[0];}
};
void main(){
FooWrapper wrapper;
wrapper.foos.push_back(new Foo());
wrapper->do_staff();
}
Код компилируется но не работает Завершается ошибкой (SIGSEGV), code 1 (SEGV_MAPERR) Как это можно заставить работать, т.е. при использовании оператора -> вызывать соответствующую функцию из Foo. Спасибо.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Если довести ваш код до компилируемого состояния, то все работает:
class CustomFoo {
public:
virtual void do_staff()=0;
};
class Foo: public CustomFoo {
public:
void do_staff() override { cout << "do_staff()\n"; };
};
class FooWrapper {
public:
vector<CustomFoo*> foos;
CustomFoo* operator->() {return foos[0];}
};
int main(){
FooWrapper wrapper;
wrapper.foos.push_back(new Foo());
wrapper->do_staff();
}