2010-07-02 5 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이 질문은 여러 번 묻는 질문이므로 쉽게 찾을 수 있습니다. –

+0

나는 시도했다. 그러나 나는 "가상"이라는 단어를 찾지 않을 것이라고 생각했다. 어쨌든 나에게 그걸 어떻게 끝내기를 원한다면 시간을 낭비하게되어서 죄송합니다. 그러나이 예는 그것을 잘 요약 해 놓았습니다. –

+0

그냥 "생성자에서 가상 함수 호출"google ** 유용한 정보를 ** 찾을 수 있습니다. "Google을 먼저 사용하십시오"라는 질문으로 인해 질문을 닫을 수 있기를 바랍니다. – Andrey

답변

1

당신은 추가 코드를 추가하지 않고이 작업을 수행 할 수 없습니다.

이 작업을 수행하는 일반적인 방법은 전용 생성자와 create 함수를 사용하여 새로 생성 된 개체에 대해 (new을 통해) 생성자를 먼저 호출 한 다음 두 번째 finish_init 메서드를 호출하는 것입니다. 이렇게하면 스택에 개체의 인스턴스를 만들지 못하게됩니다.

+0

개체의 2 단계 생성은 좋지 않습니다. 생성자의 모든 포인트는 이것을 피하는 것입니다. PIMPL 패턴에 대해 배웁니다 (모든 좋은 디자인 패턴 책에서 사용 가능). –

2

개체의 "파생 된"부분이 아직 구성되지 않았으므로 개체 함수를 호출하면 정의되지 않은 동작을 수행 할 수 없기 때문에 그렇게 할 수 없습니다.

관련 문제