2014-01-15 2 views
2

가 나는 BaseInterface 클래스가 처리 파생되는 찾을 방법 :클래스는 파생 클래스에 의해 구현되는) (실행 가상 무효로,

class BaseInterface 
{ 
public: 
    virtual void execute(int a) = 0; 
} 

그리고 나는 실행 무효을 덮어 파생 클래스의 톤이 :

class ProcessN : public BaseInterface 
{ 
public: 
    void execute(int a); 
} 

내 파생 클래스 중 하나의 void를 실행하면 버그가 있습니다. 그러나 파생 된 클래스가 많습니다. 하나 하나씩 확인하는 것은 매우 어렵습니다. 버그를 찾는 데 어려움이 있습니다.

C++에서 기본 클래스를 통해 현재 파생 클래스가 처리중인 메서드를 찾을 수 있습니까?

편집 : 좋아, 내가 코멘트에 유용한 토론 후 내 질문 향상 :

내가의 BaseInterface 클래스의 생성자 안에 뭔가를 구현할 수는 현재 처리 파생 클래스의 정보를 인쇄 할 수?

+0

, 아마도 같은 일부 코드가 너무'ptrToBaseIntfThatPointsToObjOfProcessK-> (0) 실행, 버그를 트리거 '어디를? 디버거에서 조건부 중단 점을 설정하는 것을 고려하십시오. –

+0

버그는 단순히 디버그 할 수있는 것이 아니라보기에 시각적으로 차이가 있습니다. – Rancs

+0

기본 클래스의 생성자에서 ptrofderivedclass를 가져올 수 있습니까? – Rancs

답변

1

class BaseInterface 
{ 
public: 
    virtual void execute(int a) = 0; 
    //debug helper 
    void print_info() { cout << typeid(*this).name() << endl; } 
}; 

class ProcessN : public BaseInterface 
{ 
    void execute(int a) { print_info(); } 
}; 
+0

여기서도 모든 프로세스를 하나씩 확인합니다. – Rancs

+0

문제를 명확하게 설명하지 못했습니다. 뭐하고 싶어? process1 ~ N은 하나씩 실행되며 버그가있을 때마다 로그 파일에 기록하거나 각 실행시 stdio에 출력하여 어느 것이 현재 실행 중인지 알고 있습니다. – user534498

+0

나는 똑같은 일을 할 수있다. cout << "Hello I am ProcessX"<< endl; 각 파생 클래스 내부. 파생 클래스 내에서 한 번 작성하고 파생 클래스가 작동 할 때마다 출력을 얻는 메서드가 필요합니다. – Rancs

0

호출되고 실행되는 방법 당신은 유형 ID

BaseInterface *a = new Process1(); 
BaseInterface *b = new Process2(); 

cout << typeid(*a).name() << endl; 
cout << typeid(*b).name() << endl; 

를 찾고 있습니다 또는 당신은 (*이) 당신의 실행() 그냥 간단하게 사용할 수있는 유형 ID 내부에 사용하려는 경우. ... Baseclass 포인터를 인수로 취하는 정적 클래스를 소개하고 BasePointer를 사용하여이 클래스에서 파생 클래스 객체를 확인하기 전에이 메서드를 호출하여이 메서드에서 파생 된 객체의 필요한 정보를 인쇄하고 인쇄 할 수 있습니다. 필자는 다음과 같이 제안했습니다. 도움이 안되면 최선을 다해라.

당신이 파생 클래스 중 하나가`execute`에서 버그가 있음을 확인할 수 있었다 경우
class Base 
{ 
    public: 
    virtual void exec(int i) =0 ; 
    static void check(Base* temp) 
    { 
    cout<<"Type of obj"<<typeid(*temp).name()<<endl; 
    } 
}; 
class Derived1 : public Base 
{ 
public: 
void exec(int i) 
{ 
    cout<<"Der1 Exe "<<i<<endl; 
    } 
}; 

class Derived2 : public Base 
{  
public: 
void exec(int i) 
{ 
    cout<<"Der2 Exe "<<i<<endl; 

} 
}; 
int main() 
{ 
    Base *client = NULL; 
    Derived1 lder1; 
    Derived2 lder2; 
    client= &lder2; 
    Base::check(client); 
    client->exec(0); 

    client= &lder1; 
    Base::check(client); 
    client->exec(0); 
return 0; 
} 
+0

안녕하세요 Munni, 파생 된 객체를 건드리지 않고 방법이 있는지 묻습니다. – Rancs

+0

실행 코드를 공유하십시오 ..... – Straw

+0

질문을 읽으시겠습니까? – Rancs

관련 문제