2017-11-04 8 views
0

次のコードでは、BのメソッドはAのメンバーベクトルを変更します。これを実装するには、参照によってベクトルを返します。他にも良い方法がありますか?他の場所でメンバーベクトルを変更する必要があるときに、メンバーベクトルを参照する必要がありますか?

class A { 
public: 
    vector<int> &GetData() { return data_; } 
private: 
    vector<int> data_; 
}; 

class B { 
public: 
    void Method(A *a) { 
    vector<int> &data = a->GetData(); 
    data[0] = 0; 
    data[1] = 0; 
    data[2] = 0; 
    } 
}; 
+3

慣用的な方法は 'public:std :: vector data;'です。あなたのアプローチには、カプセル化の利点と過剰なエンジニアリングの欠点がありません。 – nwp

+2

「慣用的なやり方は何であるか」は、「主に意見に基づく」傾向があり、それゆえに話題になる傾向があります。最良の答えが可能であり客観的に判断できる方法で言い換えてみてください。 – nwp

+0

自分自身に質問するには、 'メソッド'が 'B'の一部であり、' A'のメンバーでない理由があります。 –

答えて

1

これは標準的な方法ではありません。

あなたが言ったようにそれを行う、またはメンバーを公開することができます:

class A { 
public: 
std::vector<int> data_; 
}; 

class B { 
public: 
void Method(A* a) { 
    a->data_[0] = 0; 
    (...) 
}; 

ます。また、Aの友人のクラスB作り、その後、data_をプライベートにすることができ、このように:

class A { 
private: 
friend class B; 

std::vector<int> data_; 
}; 

class B { 
public: 
void Method(A* a) { 
    a->data_[0] = 0; 
    (...) 
}; 

実際にはどのようにdata_メンバーを使用するかによって異なります。

関連する問題