我想创建一个可以将行为与数据分开的类。目的是在不使用setter函数的情况下填充 vector 。
我创建了一个函数X()
将元素推入 vector 。问题在于 vector 的大小始终为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;
}
最佳答案
您的函数std::vector<int> X() {return x;}
返回类内部 vector 的副本,因此,当您调用a.X().push_back(10);
时,您要添加要复制的项,这不会影响对象内部的 vector 。为了解决这个问题,您必须通过引用返回 vector ,如下所示:std::vector<int>& X() {return x;}
编辑:正如您对问题的评论中所述,这不是一个好习惯
将非const
引用返回给您的类(class)私有(private)成员。
更好的方法是创建用于添加新项目的单独方法
通过将它们作为参数传递到 vector 中。例:void addItem(int item){ x.push_back(item); }
关于c++ - 填充类 vector ,同时将行为与数据分离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53153145/