为什么点运算符 (.) 可以与 private class members/methods 一起使用?
Why is it possible for the dot operator (.) to be used with private class members/methods?
有点愚蠢的问题,但我突然想到了这个问题:
为什么可以将点运算符用于对象的私有成员(在 member/friend 函数中)?我承认我已经使用它一段时间了,但直到现在我才想到它。但是考虑到它被用于public成员函数,似乎有点奇怪。
谁能提供一些见解?
例如(编辑:我正在学习 class 中的重载运算符):
rational rational::operator/(const rational &obj2) const
{
rational value;
value.num = (*this).num * obj2.denom;
value.denom = (*this).denom * obj2.num;
return value;
}
谢谢大家的回答! :)
.
一般用于成员访问(方法或变量),与可见性无关。这只是一种语言设计选择。通常,人们会尽量避免添加不必要的语法,而“a.b
意味着我们正在访问 a
的成员 b
”是一个很好且简单的规则——比必须学习例如“a.b
用于访问 public 方法,a#b
用于访问私有方法,a@b
用于访问 public 字段,...”。
但是请注意,使用 .
从 class 自己的代码之外访问私有成员是一个编译错误(除非您是从 class 或声明为成员 class 的友元的方法)。大多数语言的语法都有规则指定可以在哪些上下文中使用该语法。
有点愚蠢的问题,但我突然想到了这个问题:
为什么可以将点运算符用于对象的私有成员(在 member/friend 函数中)?我承认我已经使用它一段时间了,但直到现在我才想到它。但是考虑到它被用于public成员函数,似乎有点奇怪。
谁能提供一些见解?
例如(编辑:我正在学习 class 中的重载运算符):
rational rational::operator/(const rational &obj2) const
{
rational value;
value.num = (*this).num * obj2.denom;
value.denom = (*this).denom * obj2.num;
return value;
}
谢谢大家的回答! :)
.
一般用于成员访问(方法或变量),与可见性无关。这只是一种语言设计选择。通常,人们会尽量避免添加不必要的语法,而“a.b
意味着我们正在访问 a
的成员 b
”是一个很好且简单的规则——比必须学习例如“a.b
用于访问 public 方法,a#b
用于访问私有方法,a@b
用于访问 public 字段,...”。
但是请注意,使用 .
从 class 自己的代码之外访问私有成员是一个编译错误(除非您是从 class 或声明为成员 class 的友元的方法)。大多数语言的语法都有规则指定可以在哪些上下文中使用该语法。