2011-01-23 7 views
2

私は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

デレファレンスは、メンバーアクセスよりも優先度が高くなります。あなたは括弧((*it).display())を追加することができますが、ちょうど(Cの)長い間前に紹介されたショートカットをit->display()として使うべきです。

もちろん、逆参照できるポインタ(他のイテレータやスマートポインタなど)にも同じルールが適用されます。

+0

おかげで、あなたはどちらかをしたいです。実行可能なソリューションと最初の回答者によって選択されます。 –

+0

とにかく特定のベクトル要素の関数を呼び出す場合。同様に: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 *'のベクトルでない限り、2番目は間違っています(この例ではそうではありません。もしそうであれば、最初のものは間違っています)。 – delnan

+0

@delnan:ありがとうございます。今修正されました。 –

関連する問題