我将vector<test*> test1;
声明为私有,我想为此创建getter和setter。我试过了,
void setV(vector<test*> test1)
{
test1 = test1;
}
vector<test*> getV()
{
return test1;
}
它有效,但它的工作非常奇怪。还有其他办法吗?
由于
答案 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.