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

C++ 访问其他类中多个对象的私有成员向量,c++,c++11,encapsulation,C++,C++11,Encapsulation,我有两个结构相似的类(A和B),它们都包含一个结构向量 class A/B{ private: std::vector<DataStruct> vec_A/vec_B; ... public: ... } A/B类{ 私人:std::vector vec_A/vec_B; ... 公众: ... } 要创建/更新B的对象,我必须组合来自A类多个对象向量的数据(将向量中的类似条目组合为对象B向量中的一个条目,并在B中进行数据转换) 我该怎么做? 我的想法是: 让B类成为A的朋友,

我有两个结构相似的类(A和B),它们都包含一个结构向量

class A/B{
private: std::vector<DataStruct> vec_A/vec_B;
...
public:
...
}
A/B类{
私人:std::vector vec_A/vec_B;
...
公众:
...
}
要创建/更新B的对象,我必须组合来自A类多个对象向量的数据(将向量中的类似条目组合为对象B向量中的一个条目,并在B中进行数据转换)

我该怎么做?

我的想法是:

    让B类成为A的朋友,但是我听说,用C++制作课堂的朋友只是最后的手段,应该避免。
  • 在类a中编写一个
    getVector()
    函数,该函数返回对向量
    vec_a
    的引用,以便类B可以对数据进行操作。对我来说,这似乎只是绕过了数据封装。将向量设置为public有什么好处
  • 在类a中编写
    getVector()
    函数,该函数返回
    vec\u a
    的副本。但由于
    vec_A
    并不是那么小,这似乎效率低下(好的,只有几kB。应该可以,但一般来说…)
  • 为类a编写一个函数,该函数进行计算并创建一个类B的对象。然后将多个B的对象连接到一个最终的B对象中。然而,这对我来说似乎是一个很大的开销
在类a中编写一个
getVector()
函数,该函数返回一个引用 到
矢量向量A
,以便B类可以对数据进行操作。为了我 这似乎只是绕过了数据封装。有什么问题 将向量设置为公共的优点

如果B只需要观察<代码> VECARA < /C>的内容,请考虑返回<强> <代码> const < /> > <强>引用(<代码> const和<代码>):

A类{
...
公众:
//为vec_A提供只读访问权限
常量std::vector和getVector()常量{
返回向量A;
}
};

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

你有没有考虑过给B一个常量引用
vec_a
?@Xatyrian没有,但这似乎是个好主意
class A {
 ...
  public:

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