访问其他类中多个对象的私有成员向量

时间:2017-08-03 08:57:28

标签: c++ c++11 encapsulation

我有两个类似结构的类(A& B),它们都包含一个结构矢量。

class A/B{
private: std::vector<DataStruct> vec_A/vec_B;
...
public:
...
}

要创建/更新B的对象,我必须组合来自A类多个对象的向量的数据(将向量中的类似条目组合到对象B的向量中的一个条目中并在B中进行数据转换)

我该怎么做?

我的想法是:

  • 让B班成为A的朋友。但是我听说,用C ++打造班级朋友只是最后的选择,应该避免。
  • 在A类中编写getVector()函数,该函数返回对Vector vec_A的引用,以便B类可以对数据进行操作。对我来说,这似乎只是绕过了数据封装。将向量设置为公共会有什么好处?
  • 在A类中编写getVector()函数,该函数返回vec_A的副本。但由于vec_A不是那么小,这似乎是低效的(好吧,只有几个KB。应该可以工作,但总的来说......)
  • 为A类编写一个函数,它进行计算并创建一个B类对象。然后将B的多个对象连接成B的一个最终对象。但是,这对我来说似乎是一个很大的开销。

1 个答案:

答案 0 :(得分:1)

  

在A类中编写getVector()函数,返回引用   到Vector vec_A,以便B类可以对数据进行操作。为了我   这似乎只是绕过数据封装。会是什么   将向量设置为公共的优势?

如果B只需要观察vec_A的内容,请考虑返回 const 引用(const &):

class A {
 ...
  public:

    // Give read-only access to vec_A
    const std::vector<DataStruct> & getVector() const {
        return vec_A;
    }
};

我更喜欢这个解决方案只是将矢量数据成员公开:使用访问器(getter / setter)你可以更好地控制。例如,您可以实现只读访问(如上所示)。或者,如果您想提供一个setter,您还可以对输入参数等进行一些检查。