私有声明的对象变量的Mutator / Accessor方法

时间:2017-03-31 11:56:48

标签: c++ object accessor private-members mutators

我有几个私有的类声明的对象变量:

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方法返回指向对象的指针?

编辑:更改了代码,以便更多地解释问题。

2 个答案:

答案 0 :(得分:0)

使用任何方式设置a1b1的值。

您不必直接读取私有变量,也可以将值读入某些临时值,然后使用它们来修改a1b1。或者创建一个全新的Results并将其分配给m

答案 1 :(得分:0)

整个访问者的想法是防止程序员使用类做他不应该做的事情。该课程的作者没有预料到的东西。

根据定义,私人功能不适用于“使用该类的每个人”。例如,它意味着输入有效性检查不存在的东西 - 因为调用私有函数的代码应该进行那些检查(这可以多次检查相同的情况。但是如果每个人都有输入未检查结果的风险访问)。

是的,你可以通过向问题抛出裸指针来解决访问者问题。访问权限仅在编译时由编译器检查,并且无法预测编译时函数是否位于“地址XYZ”。

但如果你甚至比较狡猾,你就走错了路。操作员不友好是有充分理由的。可怜的是因为他一直在做朋友不应该做的事情。 朋友和受保护是两个非常特殊的情况,你有一个私人,有一些选择的例外。

你有两个班级的控制权吗?如果是这样,你为什么要删除朋友状态?

如果你没有控制权:你做了什么来疏忽朋友的身份?你为什么要通过赤裸裸的指针彻底破坏班级的正常工作呢?