2015-04-02 2 views
-1

Немного о идиотском вопросе, но это внезапно появилось у меня в голове:Почему оператор точки (.) Можно использовать с частными членами класса/методами?

Почему оператор-точка может использоваться с частными членами объекта (внутри функции-члена/друга)? Я признаю, что я использовал его в течение некоторого времени, но я никогда не думал об этом до сих пор. Но, учитывая, что он используется для функций публичных членов, кажется немного странным.

Может ли кто-нибудь дать представление?

Например (редактирование: Я учусь о перегруженных операторов в классе):

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

Спасибо всем, кто уже ответил! :)

+2

Зачем нужен другой оператор? – user2357112

+0

Изучение перегруженных операторов в классе. – Charybdis

+0

Как еще ваш 'operator /' получит доступ к членам 'obj2'? – Brian

ответ

0

. предназначен для доступа к члену в целом (методы или переменные), независимо от видимости. Это был просто выбор языка. Как правило, один пытается избежать добавления большего количества синтаксиса, чем необходимо, и «a.b означает, что мы обращаемся к члену b из a» - это хорошее и простое правило, которое лучше, чем необходимость обучения, например. «a.b предназначен для доступа к общедоступному методу, a#b предназначен для доступа к закрытому методу, [email protected] предназначен для доступа к общественному полю ...».

Обратите внимание, однако, что использование доступа к частному члену вне собственного класса класса является ошибкой компиляции (за исключением случаев, когда вы делаете это из класса или метода, который объявлен другом класс участника). Большинство синтаксиса языка имеют правила, определяющие, в каких контекстах может использоваться синтаксис.

+0

Друзья также имеют доступ к частным членам. – Brian

+0

@Brian: Правда; Я обновил свой ответ. –

Смежные вопросы