我想创建一个类,在其中可以将行为与数据分开。目的是在不使用setter函数的情况下填充向量。
我创建了一个名为X()
的函数来将元素压入向量。问题在于向量的大小始终为0
a.X().size() = 0
。
我有点迷茫,我找不到另一种方法。除了使用setter功能。还有另一种方法吗?
#include <iostream>
#include <string>
#include <vector>
class A {
public:
A() {};
std::vector<int> X() {return x;}
private :
std::vector<int> x;
};
int main()
{
A a;
a.X().push_back(10);
std::cout << a.X().size() << std::endl;
return 0;
}
答案 0 :(得分:5)
您的函数std::vector<int> X() {return x;}
返回类内部向量的副本,因此,当您调用a.X().push_back(10);
时,要添加要复制的项目,这不会影响对象内部的向量。为了解决这个问题,您必须通过引用返回向量,如下所示:
std::vector<int>& X() {return x;}
编辑:正如您对问题的评论中提到的那样,这不是好习惯
返回对您的班级私人成员的非const
引用。
更好的方法是创建用于添加新项目的单独方法 通过将它们作为参数传递到向量中。示例:
void addItem(int item){ x.push_back(item); }