Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Доступ к дружественным функциям внутри класса
|
|||
|---|---|---|---|
|
#18+
Если кто-то любит разгадывать загадки синтаксиса С++ на нашем форуме, то вот два вопроса по использованию дружественных функций. Рассмотрим классический пример из википедии ( http://en.wikipedia.org/wiki/Friend_function), слегка мной измененный. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. Вывод: Глобальная дружественная функция, 81 | 82 Собственная функция из класса test8A, 81 | 82 Дружественная функция из класса test8B, 81 | 82 Дружественная функция из класса test8B, 81 | 82 Теперь вопросы: 1. Почему переменные frnd1 и frnd2 теперь приходится объявлять публичными? В противном случае возникает ошибка, например: "test8B::frnd2: невозможно обратиться к private член, объявленному в классе "test8B". 2. Можно ли обратиться к двум функциям в классе test8A, которые объявлены как дружественные, и как это сделать. 3. В чем смысл использования дружественной функции, если можно наследовать класс? Предполагаю, что экономится память. Тогда насколько много экономится и как посчитать этот эффект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2013, 14:40 |
|
||
|
Доступ к дружественным функциям внутри класса
|
|||
|---|---|---|---|
|
#18+
В вашем примере в class test8A можно и private оставить. А чтобы и в class test8B можно было использовать private добавьте две строчки: Код: plaintext 1. 2. Как вместо дружественного класса дружественную функцию тут использовать сам чето сходу не понял. В итоге: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2013, 17:29 |
|
||
|
Доступ к дружественным функциям внутри класса
|
|||
|---|---|---|---|
|
#18+
Единственное нагуглилось, тут обсуждали forward declaration для friend функции, но ничего умного не сказали. Наверно нельзя. http://ubuntuforums.org/showthread.php?t=737977 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2013, 17:47 |
|
||
|
Доступ к дружественным функциям внутри класса
|
|||
|---|---|---|---|
|
#18+
pol_ar1. Почему переменные frnd1 и frnd2 теперь приходится объявлять публичными? В противном случае возникает ошибка, например: "test8B::frnd2: невозможно обратиться к private член, объявленному в классе "test8B". Потому что у класса test8B нет друзей, а к его приватному полю frnd2 идет обращение из внешних функций. pol_ar2. Можно ли обратиться к двум функциям в классе test8A, которые объявлены как дружественные, и как это сделать. А то: Код: plaintext 1. 2. 3. 4. 5. 6. 7. pol_ar3. В чем смысл использования дружественной функции, если можно наследовать класс? Предполагаю, что экономится память. Тогда насколько много экономится и как посчитать этот эффект? Зачем пользоваться молотком, если можно воспользоваться обухом топора? Это два принципиально разных приема, и назначение у них разное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2013, 22:04 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38250983&tid=2020234]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 173ms |

| 0 / 0 |
