2016-12-16 5 views
1

私にはクラスUserがあり、それにはフィールドvector<Movie> moviesがあります。 別のクラスでは、moviesの要素を取得し、メソッドset_name(name)を実行したいと考えています。 moviesにアクセスするにはどうすればよいですか?クラス内のベクトルの要素セッター関数にアクセスする最も良い方法は何ですか?

  • そのクラスをUserの友人にしていますか?
  • vector<Movie*>get_moviesの方法で返しますか?

他の方法ですか?

+0

だけ '映画を返すメソッド特定の要素のための* '。 – Barmar

+2

また、「ムービー」を返す方が良いでしょう。 –

+0

_ "私はそれをコピーしたくないのですか?" _ [@NaironAlex answer explain](http://stackoverflow.com/a/41192565/1413395) )。 –

答えて

1

クラスのユーザーに次のメソッドを追加します。

Movie& movie(size_type n) { return movies.at(n); } 
+0

もう少し背景を与えて、それは素晴らしい答えです。 –

0

を私は映画とその上にrunメソッドのSET_NAME(名)の要素を取得したい別のクラスにおいて。私がそれをコピーしたくない場合、映画にアクセスする最も良い方法は何ですか?

慣用的方法は、アクセスされるべき要素への参照を露出するようになります。

class Movie { 
public: 
     void set_name(const std::string& name) { name_ = name; } 
private: 
     std::string name_; 
}; 

class User { 
     std::vector<Movie> movies_; 
public: 
     Movie& movie(size_t n) { 
      if(n >= movies_.size()) { 
       // throw out of bound exception or such 
      } 
      return movies.at(n); 
     } 
}; 

クライアントコード:たぶん

void changeMovieName(User& userClass, size_t index, const std::string& newName) { 
    userClass.movie(index).set_name(newName); 
} 
関連する問題