我正在使用某种“经理”来存储“上下文”类,在某些情况下,我想将此“上下文”传递给其他函数以从中读取数据。
实际上,当管理器将这个“Context”传递给一个函数时,它会传递一个“const& Context”,而我的Context有一些函数声明为const(用于读取)和其他不是const的函数(因为经理必须改变上下文中的数据)
现在,我问自己,如果我只是做私人改变者并给经理友谊,那有什么不同吗?
我认为一定有些不同。 我知道,这是一个特例,但对我来说,C ++仍然有很多魔力。
答案 0 :(得分:1)
我将从两个一般性陈述开始:
const
- 正确性非常好
firendship在两个班级之间形成极为紧密的联系,这通常是一件坏事
您的Context
是否与管理员如此相关,只有 管理员才会想要修改它(现在和您的程序在这些年中不断发展)?并且Context
很高兴让经理随心所欲地修改它(访问其所有私人数据)?如果任何答案是“不”,你就不应该去友谊路线。
友谊应该谨慎使用。当课程X
向课程或职能Y
授予友谊时,您现在在代码中有两个不同的位置,必须维护X
的内部不变量:X
本身和{{ 1}}。这需要更多的维护,并且更容易出错。
简而言之,就特殊情况保留友谊。您所描述的内容似乎是正常测量的明确用法 - Y
观察者,非const
修饰符。
答案 1 :(得分:1)
根据我使用C ++的经验,使用私有变更器和提供友谊以及让公共变更器不给予友谊的主要区别在于,第二个选项允许您不提供任何内容和所有内容访问信息,但仅限于确定。假设你创建了一个名为Student的类,它有2个子类。普通学生和教师助理。很多时候,有这么多学生,老师很难照顾好一切,所以他把最好的学生当成TA。当该计划正在关注这些学生时,他们应该比普通学生更多地访问学生的信息。通过私人改变者和友情,你说一些信息(如测试成绩)是私人的,但可能由TA改变。另一方面,如果你有公共变异者而没有友谊,那么普通学生可以访问这些信息并改变成绩。
希望这有用。