2013-04-04 2 views
0

나는 :: 기본 클래스 형의 포인터의 벡터 성병을 가지고스토어 파생 된 개체는

vector<Base*> baseList; 

을 그리고 벡터에 파생 클래스 유형을 밀어 :

Derived* derivedObject = new Derived(); 
baseList.push_back(derivedObject); 

그러나 목록을 반복하고 파생 클래스에 의해 기본 클래스에서 재정의 된 함수를 호출하면 파생 클래스의 코드가 호출되지 않습니다. 올바른 방법으로 벡터를 사용하고 있습니까?

내 기본 클래스가 그 기능을 선언하기 전에 가상 키워드를 사용하고 파생 클래스와 기본 클래스를 파생 : 내가 잘못 여기서 뭘하는지

class Derived : public Base 

어떤 생각?

편집 :

I 선언 한 함수를 호출하려면 다음

typedef vector<App*>::iterator AppIterator; 
AppIterator begin() { return l_Apps.begin(); } 
AppIterator end() { return l_Apps.end(); } 

그리고 난과 같이 함수를 호출 :

for (AppIterator it = begin(); it != end(); ++it) 
{ 
    (*it)->Initialize(); 
} 

문제는 여기에있을 수 있을까요?

Base 
Derived 
Base 
Derived 
Base 
Derived 

:
+0

나에게 잘 보입니다. 어떻게 함수를 부르니? –

+7

전화하려는 기능이'가상 '으로 표시되었는지 다시 확인하십시오. –

+0

일부 코드보기 – taocp

답변

1

나는 반복자와 것은 문제가 지속되면, 다른 컴파일러를 고려 ... 그래서이 코드) =

#include <iostream> 
#include <vector> 

class Base 
{ 
public: 
    virtual void f() 
    { 
     std::cout << "Base\n"; 
    } 
}; 
class Derived: public Base 
{ 
public: 
    virtual void f() 
    { 
     std::cout << "Derived\n"; 
    } 
}; 
int main() 
{ 
    std::vector<Base*> s; 
    s.push_back(new Base()); 
    s.push_back(new Derived()); 
    s.push_back(new Base()); 
    s.push_back(new Derived()); 
    s.push_back(new Base()); 
    s.push_back(new Derived()); 
    for (std::vector<Base*>::iterator it = s.begin(); it != s.end(); ++it) 
    { 
     (*it)->f(); 
    } 
    return 0; 
} 

내가 가지고있는 출력을 나를 위해 잘 작동을 시도

dynamic_cast<>으로 포인터를 캐스팅하려고 할 수도 있습니다. 가상 메서드를 사용하여 전체 지점을 패배 시키더라도 마찬가지입니다. 행운을 빕니다.