доступ к приватному мемберу класса-владельца из инкапсулированного класса |
Здравствуйте, гость ( Вход | Регистрация )
доступ к приватному мемберу класса-владельца из инкапсулированного класса |
Алексей1153 |
22.11.2012, 12:32
Сообщение
#1
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
класс SUBCL преспокойно работает с защищёнными и приватными мемберами OWNER (компилировал в студии)
а что говорит стандарт по этому поводу ? Или инкапсулированный класс автоматически считается friend к хозяину ? |
|
|
Iron Bug |
22.11.2012, 13:04
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Смотри пункт 11.8 стандарта - Nested classes
В C++03 и ранее - нет: Цитата The members of a nested class have no special access to members of an enclosing class, nor to classes or functions that have granted friendship to an enclosing class; the usual access rules (clause 11) shall be obeyed. The members of an enclosing class have no special access to members of a nested class; the usual access rules (clause 11) shall be obeyed В C++11 - да: Цитата A nested class is a member and as such has the same access rights as any other member. The members of an enclosing class have no special access to members of a nested class; the usual access rules (Clause 11) shall be obeyed. Пример, приведённый в стандарте С++11 (из последней копии):
Вот линк на обсуждение: http://www.open-std.org/jtc1/sc22/wg21/doc...defects.html#45 Сообщение отредактировал Iron Bug - 22.11.2012, 13:16 |
|
|
Vass |
22.11.2012, 14:19
Сообщение
#3
|
Студент Группа: Участник Сообщений: 46 Регистрация: 17.3.2009 Из: Россия, Рыбинск Пользователь №: 617 Спасибо сказали: 8 раз(а) Репутация: 0 |
Стандарт С++03 говорит вот что:
пункт 11.7 параграф 1: "The members of a nested class have no special access to members of an enclosing class." Но! Есть документ содержащий поправки к стандарту: http://www.open-std.org/jtc1/sc22/wg21/doc...defects.html#45 И там сказано вот что: Цитата change The members of a nested class have no special access to members of an enclosing class, nor to classes or functions that have granted friendship to an enclosing class; the usual access rules shall be obeyed. to A nested class is a member and as such has the same access rights as any other member. Так что старые компиляторы работают в соответствии с этой поправкой и все ок. После этого я полез в новый стандарт и там сказано вот что: Цитата 11.7 Nested classes [class.access.nest] 1 A nested class is a member and as such has the same access rights as any other member. The members of an enclosing class have no special access to members of a nested class; the usual access rules (Clause 11) shall be obeyed.
Что значит что тоже все ок. Но в целом занятно, да |
|
|
Текстовая версия | Сейчас: 29.3.2024, 17:18 |