私下声明的对象变量的突变器/访问器方法

Mutator/Accessor methods for object variable declared in private

本文关键字:访问 方法 突变 变量 声明 对象      更新时间:2023-10-16

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

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;
}

当运算符解除好友关系时,它应该不再有权访问私有变量。

我将如何访问这两个对象?是否使用访问器/突变器方法返回指向对象的指针?

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

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

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

整个访问器思想的要点是防止使用类的程序员做他不应该做的事情。 该类的作者没有预料到的事情。

根据定义,私有函数不适合"使用该类的每个人"使用。例如,这意味着输入有效性检查之类的东西没有到位 - 因为调用私有函数的代码应该执行这些检查(这 aviods 多次检查相同的情况。但是,如果每个人都可以访问,则冒着输入未经检查的结果的风险)。

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

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

你能控制这两个类吗?如果是这样,为什么要删除好友状态?

如果您无法控制:您做了什么来失去好友身份?你为什么要不遗余力地通过赤裸裸的指针彻底破坏班级的正常工作?