1

double のプライベート ベクトルを持つクラスがあります。これらの値にアクセスまたは変更するには、最初に次のような方法を使用しました

void classA::pushVector(double i)
{
this->vector.push_back(i);
}
double classA::getVector(int i)
{
return vector[i];
}

これは、必要なもののために多くの演算子をオーバーロードする必要があることがわかるまで、しばらくの間機能しました。そのため、値の代わりにベクトルを直接取得および設定するように変更しようとしました。

void classA::setVector(vector<double> vector)
{
this->vector = vector;
}
vector<double> classA::getVector()
{
return vector;
}

ここで、プライベートな classA 要素を持つ classB があり、読み取りと書き込みを行う get メソッドと set メソッドもあるとします。問題は、classA の終了ベクトルに値をプッシュバックしようとしたときでした。

void classB::setFirstValue(double first)
{
this->getClassA().getVector().push_back(first);
}

これはベクトルに対してまったく何もしません。変更されていないままで、理由がわかりません... 何かアイデアはありますか?

4

2 に答える 2

3

getVector() で値によってベクトルを返しています。これは、「this->getClassA().getVector().push_back(first);」という呼び出しで、ベクターをコピーしてから、そのコピーに要素をプッシュすることを意味します。その後、コピーはすぐに破棄されます。

希望どおりに動作させるには、参照によってベクトルを返す必要があります。メソッドは次のようになります。

「ベクトル & クラス A::getVector()」

于 2010-06-15T10:04:43.300 に答える
2

この方法では:

void classA::setVector(vector<double> vector)
{
this->vector = vector;
}

ベクトルのコピーを渡しています。実際のベクトルを渡すには、参照が必要です。

void classA::setVector(vector<double> & vector)
{
this->vector = &vector;
}

クラスのベクトル変数はポインターでなければなりません。

これはすべて私にはかなり望ましくないように見えます-あなたのクラスが実際に何をしているかを再考します. クラスの外部へのポインターを維持するよりも、クラスがベクターを管理する方がはるかに理にかなっています。また、すべてのクラス メソッドを再実装する必要がある場合は、クラスはまったく必要なく、ベクトルだけが必要な場合があります。

于 2010-06-15T10:05:41.903 に答える