1

我有一个带有双打私有向量的类。为了访问或修改这些值,起初我使用了诸如

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;
}

现在,假设有一个 classB,它有一个私有的 classA 元素,它也有 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;
}

你类中的向量变量必须是一个指针。

这一切对我来说看起来都很不受欢迎——我会重新考虑你的班级实际上在做什么。类管理向量比维护指向类外部的指针更有意义。如果您需要重新实现所有类方法,也许您根本不需要 te 类,而只需要一个向量。

于 2010-06-15T10:05:41.903 回答