填充类向量,同时将行为与数据分离

时间:2018-11-05 11:05:17

标签: c++

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

1 个答案:

答案 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); }