【问题标题】:Why is it possible for the dot operator (.) to be used with private class members/methods?为什么点运算符 (.) 可以与私有类成员/方法一起使用?
【发布时间】:2015-04-02 20:25:16
【问题描述】:

有点愚蠢的问题,但我突然想到了这个问题:

为什么点运算符可以用于对象的私有成员(在成员/朋友函数中)?我承认我已经使用了一段时间了,但直到现在我才想到它。但是考虑到它是用于公共成员函数的,这就有点奇怪了。

谁能提供一些见解?

例如(编辑:我正在学习课堂上的重载运算符):

rational rational::operator/(const rational &obj2) const
{
    rational value;
    value.num = (*this).num * obj2.denom;
    value.denom = (*this).denom * obj2.num;
    return value;
}

感谢所有回答的人! :)

【问题讨论】:

  • 为什么需要不同的运营商?
  • 在课堂上学习重载运算符。
  • 您的operator/ 将如何访问obj2 的成员?
  • 没有其他方法 - 我知道在这种情况下我可以使用点运算符,但我想知道为什么以及如何在仅限于类的公共成员时使用它对象(这是不真实的,我已经知道了)
  • 但是你从来没有学到其他东西。操作员不依赖访问控制。您刚刚制定了一个任意规则并询问为什么它不适用。你的问题没有意义。

标签: c++ operators


【解决方案1】:

. 用于一般成员访问(方法或变量),与可见性无关。这只是一种语言设计选择。通常,人们会尽量避免添加不必要的语法,而“a.b 表示我们正在访问a 的成员b”是一个很好且简单的规则——这比必须学习更好。 “a.b 用于访问公共方法,a#b 用于访问私有方法,a@b 用于访问公共字段,...”。

但请注意,使用 . 从类自己的代码之外访问私有成员是一个编译错误(除非您从声明为它的朋友的类或方法中执行此操作成员的班级)。大多数语言的语法都有规则,指定可以在哪些上下文中使用该语法。

【讨论】:

  • 好友也可以访问私人会员。
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 2014-03-13
  • 2014-12-16
相关资源
最近更新 更多