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

格林戈

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

函数会std::vector<int> X() {return x;}在类内返回vector的副本,因此在调用a.X().push_back(10);时要添加要复制的项目,这不会影响对象内部的vector。为了解决这个问题,您必须通过引用返回向量,如下所示:

std::vector<int>& X() {return x;}

编辑:正如您对问题的评论中所提到的,将非const引用返回给您的班级私人成员不是一种好习惯

更好的方法是创建单独的方法,以将新项目作为参数传递到向量中。例:

void addItem(int item){ x.push_back(item); }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章