如何在C ++中为vector创建getter和setter?

时间:2011-10-03 13:57:42

标签: c++ visual-c++

我将vector<test*> test1;声明为私有,我想为此创建getter和setter。我试过了,

void setV(vector<test*> test1)
{
    test1 = test1;
}

vector<test*> getV()
{
    return test1;
}

它有效,但它的工作非常奇怪。还有其他办法吗?

由于

2 个答案:

答案 0 :(得分:9)

查看setV中的赋值语句:

test1 = test1;

私有变量test1被同名的函数参数遮蔽,并且您将该参数分配给自身。

您应该像这样定义setV

void setV(vector<test*> const &newTest1) {
  test1 = newTest1;
}

这样您就可以将参数分配给私有变量,并且使用const参数来避免不必要的临时副本。


此外,您应将getV定义为const,并返回const引用:

vector<test*> const &getV() const {
  return test1;
}

这样就可以在类的const实例上调用它,并避免为返回值制作不必要的副本。

(如果您希望调用者能够修改类的非const实例的向量,也可以定义另一个getV,而不是const。)

答案 1 :(得分:2)

与早期的响应相结合,你还需要将你的getter转换为pass-by-reference(因为pass-by-copy可能会更慢):

const vector<test *> &getV(){return test1;} //This will provide a read-only reference to your vector.