2012-12-10 5 views
0

루프에 dynamic_cast을 넣어도 되나요?루프에 dynamic_cast 넣기

//Searches for the reservation with the given reservation number, and //deletes it. Uses the confirmReservation function if the reservation to be  //deleted was an OK one 
void cancelReservation(string resNum) 
{ 
    for (int i=0;i<seats+waitingListMax;i++) 
    { 
     for (int seat=i;seat<seats;seat++) 
     { 
    Ok* okptr=dynamic_cast <Ok*>(reservations[seat]); 
     } 
     for (int wait=seats;wait<seats+waitingListMax;wait++) 
     { 
    Waiting* waitingptr=dynamic_cast <Waiting*>(reservations[wait]); 
     } 
     if ((reservations[i]!=0) && (reservations[i]->getReservationNumber()==resNum)) 
      if (okptr) 
      { 
       //doing somting 
      } 
      if (waitptr) 
      { 
       //doing somthing else 
      } 
    } 
+2

왜 괜찮지 않습니까? 내 말은, 당신의 코드는 동일한 포인터 시간과 시간을 다시 덮어 쓰지만, 캐스트 자체는 괜찮습니다. –

+1

정확히 무엇을하려하고 있습니까? 루프가 완료된 직후에 파손되는 변수에 각 캐스팅을 덮어 씁니다. –

+0

괜찮 았지만 수행 한 방식이 아닙니다. 캐스트가 덮어 쓰여 지므로 마지막 캐스트 만 남습니다. – iammilind

답변

1

for 루프에 넣는 데는 아무런 문제가 없습니다.
클래스가 다형성이어야하지만 이는 dynamic_cast을 사용하기위한 기본 조건입니다.

예를 들어, 매 반복마다 포인터를 덮어 쓰기 때문에 실제로는별로 도움이되지 않습니다. 그러나 이것이 원래 코드의 단순화 일 것입니다.

1

루프 내에서 dynamic_cast을 사용할 때 아무 문제가 없습니다.

코드에 다른 문제가 있습니다. 포인터 okptrwaitingptr은 가장 안쪽의 {}으로 범위가 지정되므로 나중에 사용할 수 없습니다.

+0

네, 그건 제 잘못입니다. 고마워. – Judy