2014-05-16 3 views
0

그래서 내 문제는 기본 클래스에 대한 포인터 만 가지고 하위 클래스의 필드에 액세스하는 방법을 모른다는 것입니다. 대신 어떻게해야하는지 물어볼 것이지만 링크드 목록에 대한 더 나은 해결책이 될 수 있다고 생각했습니다.Linked 여러 하위 클래스가있는 클래스 목록?

+0

동적 캐스트를 사용할 수 없습니까? – MikeMB

답변

1

그래서 당신은 부모와 같은 부모 클래스와 부모의 연결리스트가 있다면, 당신은 다음과 같이 하위 클래스로 캐스팅 dynamic_cast는 사용할 수 : 당신은 여기 dynamic_cast는에 대한 자세한 정보를 찾을 수

Child* child = dynamic_cast<Child*>(linkedlist_Parent_pointer); 

: MSDN

링크 된 목록을 의사 코드 예제 : 당신은 P의 연결리스트를 가질 수 있도록 P, 다음, A, B 및 C는, 그들이 P에서 상속이 있습니다 이의 말을하자, 당신은 부모 클래스가 상상 :

마음에 2,053,210

이 모든 촬영과 같은 노드 클래스 :

template<class T> 
class Node 
{ 
public: 
Node(T* value) 
{val = value;} 

InsertAfter(Node<T>* node) 
{next = node;} 

T* val; 
Node<T*>* next; 
} 

이는 아이디어를 얻을 수있는 단지 감소 예입니다,이 당신을 도울 수 있기를 바랍니다.

+0

나는 동적 캐스팅으로 어떻게 할 수 있는지 모르겠다. 적어도 서브 클래스의 각 유형마다 노드 유형을 하나씩 만들 필요가 있다고 생각했다. 그리고 다음 노드에 대한 포인터를 void로 초기화 할 수 없었으며 서브 클래스에 따라 정적 캐스트를 사용 했습니까? –

+0

기본 클래스를 노드에 포함 된 유형으로 사용할 수 있습니다. 그런 다음 값을 얻으려면 노드에서 "객체"클래스를 추출합니다. 기본 클래스이기 때문에 자식 클래스 유형을 알고 있으면 dynamic_cast를 사용할 수 있습니다 값을 얻으려면 static_cast 및 dynamic_cast에 대한 자세한 내용을 보려면 여기를 확인하십시오. http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-const-cast-and-reinterpret-cast -be-used – yosbel

+0

다른 하위 클래스를 사용하는 링크 목록의 예가 있습니까? 내가 읽은 바에 따르면 해결 방법 없이는 구현이 불가능한 것처럼 보이기 때문에 하나의 큰 클래스에서 모든 하위 클래스와 기본 클래스를 통합하는 것이 더 간단해질 것이라고 생각하게되었습니다. –

0

일반적으로 기본 클래스 열거 유형, 다음 상속 한 클래스에 가득 유형이 있습니다.

class base 
{ 
    base() { t = TYPE_UNKNONW; }; 
    base (enum type) { t = TYPE_A; }; 
    enum type { TYPE_UNKNONW, TYPE_A, TYPE_B }; 

    protected: 
    enum type t; 
} 

class A : public base 
{ 
    A (enum type x) : base (x) {}; 
} 

는 그 다음 일원이 기능에, 당신이 switch 문을 가질 수 있습니다. 이는 dynamic_cast를 사용할 수없는 경우의 대안입니다.

관련 문제