2012-09-21 3 views
2

다음과 같은 문제가 있습니다. 나는 C++에서 상속 구조를 코딩하는 중이다. 간단히 말해, 이것은 내가하려고하는 것입니다. 클래스 A는 기본 클래스이고 클래스 B와 C는 상속 된 클래스입니다. 클래스 B와 클래스 C는 각각 고유하고 고유 한 멤버 함수를 가지고 있습니다.C++에서 상속되는 클래스 별 함수 호출

이제 다음과 같이 I 클래스 A 형의 공유 포인터의 벡터를 만들 부스트 스마트 포인터 라이브러리 사용 :

class A{ 
    A(); 
    virtual print(); 
} 

class B : public A{ 
    B(); 
    virtual print(); 
} 

class C{ 
    C(); 
    virtual print(); 
    void uniqueFunc(); 
} 

int main(){ 

    vector<shared_ptr<A> > myA; 
    shared_ptr<B> myB; 
    shared_ptr<C> myC; 

    myA.push_back(myB); 
    myA.push_back(myC); 

} 

것은 지금은 벡터 내에서 회원의 종류를 확인하는 방법이있다. 이것은 문제가되지 않습니다. 내 질문은 어떻게 클래스 내에서 C 클래스의 멤버에 대해 uniqueFunc를 호출 할 것인가입니다. 내가 추방해야 할까? 또는 가상 기능을 만들어야합니까? 그러나 클래스 C에 고유 한 uniqueFunc가 필요합니다. 멤버 복사본을 만드는 것을 피하고 벡터에서 멤버를 직접 변경하는 것을 피하고 싶습니다.

+0

당신의 모범에서? –

답변

3

boost::shared_ptr<C>으로 다운 캐스트하거나 A에 가상 함수를 만들어야합니다.

당신이, 당신이 사용할 수있는 다운 캐스트하려는 가정 부스트의 pointer cast functions :

boost::static_pointer_cast<C>(myA.back())->uniqueFunc(); 

(또는 동적 유형 검사를 필요로하는 경우 dynamic_pointer_cast<C>를 사용합니다.) 당신이 A 또는 B 중 하나에서 상속 C를 의미 가정

+0

고마워요! 잘 했어! :) – rameezk