2011-01-23 1 views
2

Room 클래스가 있는데, Room 클래스는 setPrice 및 display 함수를 가지고 있습니다. 저장 공간 벡터에 객체C++ : 벡터 반복자를 사용하여 클래스 메서드 호출?

I : 내 주요 기능에

room.push_back(Room("r001", 1004, 2, "small")); 
room.push_back(Room("r002", 1005, 2, "small")); 
room.push_back(Room("r003", 2001, 4, "small")); 
room.push_back(Room("r004", 2002, 4, "small")); 

, 난 모든 객실를 표시하는 표시 기능을 만들 수 있습니다. 여기 내 코드는 다음과 같습니다.

void displayRoom() 
{ 
    vector<Room>::iterator it; 
    for (it = room.begin(); it != room.end(); ++it) { 
     *it.display(); // just trying my luck to see if it works 
    } 
} 

그러나 방의 표시 방법은 아닙니다.

방 (클래스)의 표시 방법 (인수 없음) 및 setPrice (1 인수) 메소드는 어떻게 호출합니까?

답변

9

역 참조는 구성원 액세스보다 우선 순위가 높습니다. parens ((*it).display())를 추가 할 수는 있지만 오래 전에 소개 된 바로 가기 (C로)를 it->display()으로 사용해야합니다.

물론 역 참조 할 수있는 포인터와 다른 모든 규칙 (다른 반복자, 스마트 포인터 등)에도 동일한 규칙이 적용됩니다.

+0

덕분에 당신도 원하는 그래서. 실행 가능한 솔루션과 첫 번째 응답자로 선택됩니다. –

+0

어쨌든 특정 벡터 요소의 기능을 호출하는 경우. Like : room [2] -> setPrice (200) –

+0

@cpp_noob :'room [2]'는 당신에게 뭔가를줍니다. 그것은 객체이며, 어떤 객체 ('room [2] .setPrice (200)')에서와 같이 메소드를 호출하십시오. 뭔가 다시 참조 해제 할 필요가 있다면 다시 참조 ('(* (room [2]) .setPrice (200)'또는'room [2] -> setPrice (200)') 역 참조해야합니다. – delnan

3

(*it).display() 또는 간단하게 it->display()을 시도하십시오.

1

반복자는 포인터와 비슷합니다.

it->display(); 

나 : 답과 설명은

(*it).display(); 
+2

두 번째는 'Room *'의 벡터가 아닌 한 잘못입니다 (이 예에서는 그렇지 않습니다 - 만약 그렇다면 첫 번째가 잘못되었습니다). – delnan

+0

@delnan : 발견해 주셔서 감사합니다. 지금 수정되었습니다. –