我有几个私有的类声明的对象变量:
private:
a a1;
这个重载的操作符最初是这个类的朋友,并访问了如下所示的对象:
istream & operator >>( istream & input, class & m )
{
input >> m.a1;
return input;
}
ostream & operator <<( ostream & os, const class & m )
{
os << m.uni;
return os;
}
当操作员不友好时,它应该不再能够访问私有变量。
我如何访问这两个对象?是否使用accessor / mutator方法返回指向对象的指针?
编辑:更改了代码,以便更多地解释问题。
答案 0 :(得分:0)
使用任何方式设置a1
和b1
的值。
您不必直接读取私有变量,也可以将值读入某些临时值,然后使用它们来修改a1
和b1
。或者创建一个全新的Results
并将其分配给m
。
答案 1 :(得分:0)
整个访问者的想法是防止程序员使用类做他不应该做的事情。该课程的作者没有预料到的东西。
根据定义,私人功能不适用于“使用该类的每个人”。例如,它意味着输入有效性检查不存在的东西 - 因为调用私有函数的代码应该进行那些检查(这可以多次检查相同的情况。但是如果每个人都有输入未检查结果的风险访问)。
是的,你可以通过向问题抛出裸指针来解决访问者问题。访问权限仅在编译时由编译器检查,并且无法预测编译时函数是否位于“地址XYZ”。
但如果你甚至比较狡猾,你就走错了路。操作员不友好是有充分理由的。可怜的是因为他一直在做朋友不应该做的事情。 朋友和受保护是两个非常特殊的情况,你有一个私人,有一些选择的例外。
你有两个班级的控制权吗?如果是这样,你为什么要删除朋友状态?
如果你没有控制权:你做了什么来疏忽朋友的身份?你为什么要通过赤裸裸的指针彻底破坏班级的正常工作呢?