|
|
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 15:51 |
|
||
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
SeraTJ...protected: int m_a;.... и Вы попытались обратиться не к СВОЕМУ экземпляру обьекта "A", а к "чужому", пришедшего по ссылке. с уважением (круглый) ЗЫ А вот такая комбинация "прокатит" из обьекта "B" к "A". но к своему :) A::m_a; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 15:57 |
|
||
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
a - другой объект Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 15:58 |
|
||
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
Чего гоните-то ? В C++ доступ к членам класса контролируется на уровне классов, а не объектов. Это вам не smalltalk. Так что B будет иметь доступ к protected-члену своего предка - класса A. На счет A::m_a; - m_a не static member, к нему нельзя иметь доступ через имя класса. Поэтому здесь это будет воспринято как область определения, но поскольку m_a в B нет, то область определения можно просто опустить. Т.е. писать m_a. Но все равно и m_a и a.m_a допустимы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 13:45 |
|
||
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
А ты компилировать пробовал ? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 13:49 |
|
||
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext PS: компилятор Borland C++ 5.5.1 Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 13:55 |
|
||
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
MasterZiv....Так что B будет иметь доступ к protected-члену своего предка - класса A. На счет A::m_a; - m_a не static member, к нему нельзя иметь доступ через имя класса. Поэтому здесь это будет воспринято как область определения, но поскольку m_a в B нет, то область определения можно просто опустить. Т.е. писать m_a. Но все равно и m_a и a.m_a допустимы. Ключевые слова public, protected и private как раз и РАЗГРАНИЧИВАЮТ ДОСТУП к членам класса. Вы произнесли правильно фразу... "СВОЕГО" предка. Свой предок - тот от которого порождён. А имя которое Вы ему присвоили (хоть Васю Пупкина) синтаксис языка не регламентирует (только в разделе уникальности). Посему "A" ПАРЕНТ не есть "A" из передаваемых ПАРАМЕТРОВ. По поводу комбинации ... A::m_a - данное использование понятно - откель взялось m_a. Если Вам это поперёк одного места - мона и просто m_a. По мне - вообще не совсем корректно лезть поперёк "родного" класса, который содержит енту переменную. Но строгость иногда полезно и похерить, но аккуратно :) с уважением (круглый) ЗЫ И как говорил один профессор математики, выводя по памяти доказательства всевозможных теорем. - "Кто не верит - пусть проверит !" (от себя добавлю, - "Пусть компильнёт!") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 14:32 |
|
||
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
to kolobok0, Карабас Барабас И я прекрасно вижу, что a - другой объект MasterZivВ C++ доступ к членам класса контролируется на уровне классов, а не объектов. Это вам не smalltalk. Так что B будет иметь доступ к protected-члену своего предка - класса A. Вот-вот. Мне тоже всегда так казалось. А ведь не компилируется-то приведенный мной первый пример.. :(( Все же не понятно :// ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 16:46 |
|
||
|
classic C++. why no access?
|
|||
|---|---|---|---|
|
#18+
Так нельзя. В данном случае доступ к защищенным членам можно осуществлять через this, через указатель или ссылку на сам производный класс, но не через базовый. п. 11.5 стандарта. (там же есть наглядный пример корректного кода и ill-formed). p.s. Хотя логика такого поведения мне самому не совсем понятна :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 17:25 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2032874]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 340ms |

| 0 / 0 |
