2015-11-22 7 views
0

Я хотел бы сделать следующее:вызов получен метод из базового указателя

void do_stuff(Base* base_ptr) { 
    // here I need the overridden methods 
    base_ptr->init(); 
} 

class Base { 
    Base() { 
    do_stuff(this); 
    } 
    virtual void init() {} 
}; 

class Derived : public Base { 
    virtual void init() override { 
     // Derived specific init 
    } 
} 

Но все это я получаю призывы к Базе :: Init(), это даже можно делать то, что я намерен?

+0

Как Base есть какие-либо знания Derived? –

+0

Я думаю, что вызов 'new Derived' подразумевается здесь как то, что должно быть запущено. –

+3

Разрешено ли вызывать виртуальные функции из конструктора? –

ответ

2

Вы вызываете виртуальную функцию внутри конструктора!

Дублированный из ->Calling virtual functions inside constructors

+0

Спасибо, хорошо ли «зарегистрировать» объект в каком-то глобальном контейнере в базовом конструкторе? Доступ к виртуальным методам произойдет позже. – Teris