访问放在类中的对象的方法

时间:2010-05-15 21:04:35

标签: c++ class attributes

班级A拥有班级c的实例C。另一个班级B必须通过c方法修改C::setBlah();

C getC();中创建一个访问者A然后使用A.getC().setBlah()是不是很糟糕?

或者我应该创建一个可以调用A::setBlah();的方法C::setBlah();吗?如果有这样的方法,这不是很烦人吗?

3 个答案:

答案 0 :(得分:2)

和大多数人一样“X做不好吗?”问题,答案是它完全取决于给定的情况。

有时候,拥有getC()类函数可能是一个非常糟糕的主意,因为它打破了封装。其他时候它可能完全正常,因为封装该细节可能是无关紧要的,编写大量的包装函数会增加您必须编写的代码量。

选择对于给定情况最有意义的选择。在我写的代码中,我采用了两种方法。

如果你选择getC()路线,请务必返回参考号;否则你将修改一个听起来不像你想要的副本。或者,您可以考虑将A::c公开,以便您根本不需要任何功能。

要考虑的第三个选项是C的继承,这样就无需getC()中的A或包装函数。

答案 1 :(得分:1)

如果C有许多类似的方法可以被A外的类调用,我绝对不会将它们添加到A.我更喜欢尽可能减少接口。如果这些更改是相关的并且一起完成,您可以向A添加专用的单个函数以立即执行对C的所有调用,并以直观的名称逻辑收集所有这些更改。

这样的设置也提出了一个问题:为什么B需要触摸A的成员C?也许你的设计不太正确 - C应该是B的成员而不是A?

答案 2 :(得分:1)

方法C getC();会创建c的副本,因此调用A.getC().setBlah()会修改c的副本,而不是c A的副本}。