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

jca*_*los 0 c++ visual-c++

我宣称vector<test*> test1;是私人的,我想为此创建getter和setter.我试过了,

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

vector<test*> getV()
{
    return test1;
}
Run Code Online (Sandbox Code Playgroud)

它有效,但它的工作非常奇怪.还有另一种方法吗?

谢谢

Wyz*_*a-- 9

查看赋值语句setV:

test1 = test1;
Run Code Online (Sandbox Code Playgroud)

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

你应该这样定义setV:

void setV(vector<test*> const &newTest1) {
  test1 = newTest1;
}
Run Code Online (Sandbox Code Playgroud)

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


此外,您应该定义getVconst,并返回一个const引用:

vector<test*> const &getV() const {
  return test1;
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 仅供参考,`this-> test1 = test1`也可以. (2认同)