C++ 访问其他类中多个对象的私有成员向量
我有两个结构相似的类(A和B),它们都包含一个结构向量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的朋友,
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()
的引用,以便类B可以对数据进行操作。对我来说,这似乎只是绕过了数据封装。将向量设置为public有什么好处vec_a
- 在类a中编写
函数,该函数返回getVector()
的副本。但由于vec\u a
并不是那么小,这似乎效率低下(好的,只有几kB。应该可以,但一般来说…)vec_A
- 为类a编写一个函数,该函数进行计算并创建一个类B的对象。然后将多个B的对象连接到一个最终的B对象中。然而,这对我来说似乎是一个很大的开销
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;
}
};