2010-07-02 16 views
-1

Можно создать дубликат:
Calling virtual functions inside constructorsC++: вызов функции derrived из базового конструктора?

class Base 
    { 
    virtual void method() 
     { cout << "Run by the base."; }; 
    public: 
    Base() { method(); }; 
    }; 

class Derived: public Base 
    { 
    void method() 
     { cout << "Run by the derived."; }; 
    }; 

void main() 
    { 
    Derived(); 
    } 

Выход:

Run by the base. 

Как можно было производный метод запуска вместо этого, не делая производный конструктор?

+2

-1 Этот вопрос задан много раз на SO, и вы могли бы найти его легко. –

+0

Я пробовал, но я не думал искать слово «виртуальный». В любом случае, жаль тратить свое время, если вы хотите, чтобы я закрыл его, расскажите мне, как, но я думаю, что этот пример подводит итог. –

+0

просто Google «вызывает виртуальные функции от конструктора» вы найдете ** тонны ** полезной информации. Я хочу, чтобы я мог закрыть вопрос из-за «Использовать Google первым» – Andrey

ответ

1

Вы не можете сделать это без добавления дополнительного кода.

Общим способом достижения этого является использование частного конструктора и функции create, которая сначала вызывает конструктор (через new), а затем второй метод finish_init для вновь созданного объекта. Однако это мешает вам создавать экземпляры объекта в стеке.

+0

Двухэтапное создание объектов - плохая идея. Весь смысл конструкторов заключается в том, чтобы избежать этого. Узнайте о шаблоне PIMPL (доступен во всех хороших книгах с шаблонами дизайна). –

2

Вы не можете, так как «производная» часть объекта еще не построена, поэтому вызов функции-члена из нее будет неопределенным поведением.

Смежные вопросы