我想创建一个可以将行为与数据分开的类。目的是在不使用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/

10-12 16:07
查看更多