访问其他 class 中多个对象的私有成员向量
Access private member vector of multiple objects in other class
我有两个具有相似结构的 classes (A & B),它们都包含一个结构向量。
class A/B{
private: std::vector<DataStruct> vec_A/vec_B;
...
public:
...
}
为了 create/update B 的一个对象,我必须将来自 class A 的多个对象的向量的数据组合起来(将向量中的相似条目合并为对象向量中的一个条目B 并在 B 中进行数据转换)。
我该怎么做?
我的想法是:
- 让 class B 成为 A 的朋友。但是我听说,在 C++ 中让 classes 成为朋友只是最后的手段,应该避免。
- 在classA中写一个
getVector()
函数,returns一个Vectorvec_A
的引用,这样classB就可以对classB进行操作数据。对我来说,这似乎只是绕过了数据封装。将向量设置为 public 有什么好处?
- 正在 class A 中编写
getVector()
函数,其中 returns 是 vec_A
的副本。但是由于 vec_A
不是那么小,这似乎是低效的(好吧,只有几 kB。应该可以,但一般......)
- 为classA编写一个函数,它进行计算并创建一个classB的对象。然后将B的多个对象连接成一个B的最终对象。然而,这似乎对我来说是很多开销。
Writing a getVector()
function in class A, which returns a reference
to the Vector vec_A
, so that class B can operate on the data. For me
this seems to simply bypass the data encapsulation. What would be the
advantage to setting the vector to public?
如果B只是需要观察vec_A
的内容,考虑返回一个const
引用(const &
):
class A {
...
public:
// Give read-only access to vec_A
const std::vector<DataStruct> & getVector() const {
return vec_A;
}
};
我更喜欢这种解决方案,而不是只制作矢量数据成员 public:使用访问器 (getter/setter),您可以更好地控制。例如,您可以实现只读访问(如上所示)。或者,如果你想提供一个setter,你也可以对输入参数等进行一些检查
我有两个具有相似结构的 classes (A & B),它们都包含一个结构向量。
class A/B{
private: std::vector<DataStruct> vec_A/vec_B;
...
public:
...
}
为了 create/update B 的一个对象,我必须将来自 class A 的多个对象的向量的数据组合起来(将向量中的相似条目合并为对象向量中的一个条目B 并在 B 中进行数据转换)。
我该怎么做?
我的想法是:
- 让 class B 成为 A 的朋友。但是我听说,在 C++ 中让 classes 成为朋友只是最后的手段,应该避免。
- 在classA中写一个
getVector()
函数,returns一个Vectorvec_A
的引用,这样classB就可以对classB进行操作数据。对我来说,这似乎只是绕过了数据封装。将向量设置为 public 有什么好处? - 正在 class A 中编写
getVector()
函数,其中 returns 是vec_A
的副本。但是由于vec_A
不是那么小,这似乎是低效的(好吧,只有几 kB。应该可以,但一般......) - 为classA编写一个函数,它进行计算并创建一个classB的对象。然后将B的多个对象连接成一个B的最终对象。然而,这似乎对我来说是很多开销。
Writing a
getVector()
function in class A, which returns a reference to theVector vec_A
, so that class B can operate on the data. For me this seems to simply bypass the data encapsulation. What would be the advantage to setting the vector to public?
如果B只是需要观察vec_A
的内容,考虑返回一个const
引用(const &
):
class A {
...
public:
// Give read-only access to vec_A
const std::vector<DataStruct> & getVector() const {
return vec_A;
}
};
我更喜欢这种解决方案,而不是只制作矢量数据成员 public:使用访问器 (getter/setter),您可以更好地控制。例如,您可以实现只读访问(如上所示)。或者,如果你想提供一个setter,你也可以对输入参数等进行一些检查