9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
|
||||||
1 | ||||||
Доступ к членам класса16.09.2014, 12:32. Показов 2310. Ответов 20
Метки нет Все метки)
(
Есть два класса:
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
16.09.2014, 12:32 | |
Ответы с готовыми решениями:
20
Доступ к членам класса Доступ к private членам класса
Доступ к закрытым членам базового класса |
58 / 58 / 13
Регистрация: 12.11.2011
Сообщений: 109
|
|
16.09.2014, 12:39 | 2 |
К private членам никак. Если хочешь чтобы члены класса были доступны в классе наследнике, но не были публичными, то правильно помечать их как protected
0
|
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
|
||||||
16.09.2014, 12:39 [ТС] | 3 | |||||
Да я пробовал через protected , тоже не получается:
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
16.09.2014, 12:41 | 4 |
А как же друзья?
![]() Добавлено через 1 минуту Только если это методы. Изменяемые данные следует оставлять в секции private.
0
|
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
|
||||||
16.09.2014, 12:44 | 5 | |||||
делай iData protected, тогда доступ из производного класса должен быть.
либо
0
|
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
|
|||||||||||
16.09.2014, 12:44 [ТС] | 6 | ||||||||||
Ну вот допустип обращение через функцию:
0
|
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
|
|
16.09.2014, 12:52 [ТС] | 8 |
Аа, точно , там же const стоит : CView::CView(const CPerson aPerson)
получается , что с константными объектами могут работать только константные методы?
0
|
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
|
|
16.09.2014, 12:53 | 9 |
только смысл какой в dd, если это iData, к которому из CView можно получить доступ в любой момент.
да, для const объекта надо вызывать const методы. так компилятор заботится о неизменности полей константного объекта.
0
|
58 / 58 / 13
Регистрация: 12.11.2011
Сообщений: 109
|
|
16.09.2014, 12:54 | 10 |
Это да. В C++ много как можно получить private данные. Можно через файл/базу, расшаренную память. Но лучше делать как правильно, а не как можно.
![]()
0
|
58 / 58 / 13
Регистрация: 12.11.2011
Сообщений: 109
|
|
16.09.2014, 13:06 | 12 |
А что тут рассказывать? Данные можно хранить не только в поле класса, но и вне класса, вплоть до удалённого какого-нибудь сервера, а из другого класса эти данные брать и изменять. Возможности безграничны, вопрос только в правильной архитектуре. А фишка с friend мне кажется какой-то костыльной и не правильной. Если создатель класса сделал член private значит к нему не надо обращаться, а если он хочет чтобы к нему обращались из классов наследников то он член пометит как protected.
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
16.09.2014, 13:20 | 13 |
Это уже никоим образом к языку не относится.
Посмотрите хотя бы стандартную библиотеку. Там тоже используется friend в некоторых местах.
Повторюсь ещё раз:
1
|
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
|
||||||
16.09.2014, 13:57 [ТС] | 14 | |||||
А можно ещё маленький вопрос :
если в функцию передаётся параметр через указатель : /*для изменения данных*/
0
|
16469 / 8968 / 2199
Регистрация: 30.01.2014
Сообщений: 15,571
|
||||||
16.09.2014, 14:04 | 15 | |||||
NNN7,
0
|
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
|
||||||
16.09.2014, 14:11 [ТС] | 16 | |||||
Не получается никак обратится:
Добавлено через 2 минуты Можете , пожалуйста , объяснить , как это работает ? Почему не нужно использовать разыменование?
0
|
2058 / 1591 / 678
Регистрация: 27.07.2012
Сообщений: 4,768
|
||||||
16.09.2014, 14:19 | 17 | |||||
0
|
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
|
||||||
16.09.2014, 14:19 | 18 | |||||
вот два варианта:
а твой пример со звездочкой не работает, так как по правилам приоритета звездочка относится к aPerson.iHeight, а не к aPerson. Поэтому происходит попытка получить значение, лежащее по адресу aPerson.iHeight, что само по себе неправильно. Если бы aPerson не был указателем, а iHeight - был, то это бы заработало)
1
|
16469 / 8968 / 2199
Регистрация: 30.01.2014
Сообщений: 15,571
|
||||||
16.09.2014, 14:21 | 19 | |||||
Это и есть разыменование + доступ (operator->). Если хочешь явно, то надо так:
1
|
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
|
|
16.09.2014, 15:13 [ТС] | 20 |
Всем большое спасибо за объяснения!
![]()
0
|
16.09.2014, 15:13 | |
Помогаю со студенческими работами здесь
20
Доступ к членам одного класса с другого
Как получить доступ к членам класса из функций Доступ к членам класса класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |