2013-07-16 1 views
1

어떻게 해결할 수 있습니까? 나는 적절한 방법을 실행하고 싶다. 이 문제를 해결할 방법이 있습니까? 하나의 루프에서 메소드를 실행하려고합니다.C++ 상속, 어떻게 해결할 수 있습니까?

class Base 
{ 
public: 
    void something() {} 
}; 

class Child : public Base 
{ 
public: 
    void something() {} 
}; 

class SecondChild : public Base 
{ 
public: 
    void something() {} 
}; 

std::vector<Base*> vbase; 

Child * tmp = new Child(); 

vbase.push_back((Base*) tmp); 

SecondChild * tmp2 = new SecondChild(); 

vbase.push_back((Base*) tmp); 

for (std::vector<Base*>::iterator it = vbase.begin(); it != vbase.end(); it++) 
{ 
    //here's problem, I want to execute proper method "something", but only I can do is execute Base::something; 
    (*it)->something(); 
} 

기본 유형의 자식이 많을 때 형식을 변환하는 방법을 알지 못합니다.

+3

가상 기능이 필요합니다. 그리고 스마트 포인터를 사용하십시오. – chris

+0

Dupe? http://stackoverflow.com/questions/3328022/confused-with-c-inheritance?rq=1 – chris

답변

10

몇 가지.

하나, 물건을 (Base*)으로 전송할 필요가 없습니다. 암시 적 전환은 이미 귀하를 위해 그것을 할 것입니다. 둘째, 함수를 virtual으로 정의하면 적절한 함수가 호출됩니다.

+0

감사합니다. 가상 기능을 잊어 버렸습니다. – UnknownError1337

4

기본 클래스에 virtual으로 메서드를 선언해야합니다.

3

해결책은 something()virtual으로 만드는 것입니다.

class Base { 
public: 
    virtual void something() {} 
}; 
... 
[in a function] 
Base *p = new Child; 
p->something(); //calls Child's something 
관련 문제