|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.01.2012, 18:16 | #1 |
Форумчанин
Регистрация: 25.11.2010
Сообщений: 164
|
Обращение к унаследованным свойствам внутри класса
Есть класс:
Код:
Код:
Возможно Я Быдлокодер ©.
|
11.01.2012, 18:27 | #2 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
t2skler
как обратиться к свойству унаследованному от AAA ? Никак. Свойство private не для того вводили, чтобы кому попало данные отдавать.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
11.01.2012, 19:36 | #3 |
Форумчанин
Регистрация: 25.11.2010
Сообщений: 164
|
Но они же должны становиться приватными и для этого класса, а внутри класса мы можем обращаться к приватным свойствам.
class AAA { private: int PNum; //... public: void PFive() { PNum += 5; } }
Возможно Я Быдлокодер ©.
|
11.01.2012, 21:08 | #4 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
Приватные свойства никому ничего не должны. А обратиться к ним можно только из того класса, в котором они описаны (и из друзей), а не из классов-наследников
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
12.01.2012, 05:26 | #5 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
На самом деле, можно получить доступ к приватным данным любого класса.
Только нужно выполнить ряд условий: 1. Нужно очень сильно этого хотеть, ибо это "взлом природной защиты класса". 2. Отдавать отчет себе в том, что делаешь, и какие могут быть последствия. 3. Нужно знать внутренне устройство класса, который необходимо подвергнуть взлому. 4. Что бы избавить себя от необходимости каждый раз вникать во внутреннее устройство класса-жертвы, можно использовать технику "манипулятивных классов". Но это противоречит пункту 2. Манипулятивные классы - это классы, которые не имеют собственных данных-членов, за исключением одного указателя. Такие классы умеют "нацеливаться" на данные-члены классов заданного типа. И делать с этими данными все что угодно так, словно это их собственные данные. Область применения манипулятивных классов: альтернатива полиморфизму, либо "Белый ящик" - обеспечение доступа ко всем данным исследуемого класса в режиме отладки. /зы Всегда дешевле исправить причину, чем бороться с последствиями. Поэтому, если есть такая возможность - лучше ещё раз пересмотреть архитектуру, а не пытаться бороться с последствиями её ущербности. Последний раз редактировалось _Bers; 12.01.2012 в 05:30. |
12.01.2012, 06:28 | #6 | |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
Цитата:
Вы действительно считаете, что оно надо ТС?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
|
12.01.2012, 06:46 | #7 |
Форумчанин
Регистрация: 09.10.2010
Сообщений: 217
|
А создание паблик функции изменяющую Pnum в классе ААА не решает проблему?
Ёж птица гордая, пока не пнешь не полетит.
|
12.01.2012, 07:02 | #8 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
ТС произвел на меня впечатление человека, который изучает "правила" использования модификаторов доступа. Но он пока ещё не осознал "идею". То есть, он не вполне понимает, зачем это вообще нужно. ТС нужно понять самую идею модификаторов доступа. А именно: в чем заключается их смысл? Для чего они нужны? И тогда ему станет очевидно, почему потомки в общем случае не имеют доступа к приватным данным предка. Так же, ему станет очевидно когда, и зачем нужны те, или иные модификаторы доступа при проектировании собственной архитектуры. Допустим я сделал класс: Код:
Таким образом достигается негласное соглашение между разработчиком класса, и пользователями этого класса: "используйте возможности моего класса согласно его документации, и он гарантирует вам стабильную работу". Все то, что приватное, специально делается приватным, специально для того, что бы никто снаружи доступ получить не мог. Если по какой то причине, для стабильной работы всей архитектуры потребовалось, что бы один кусок кода получил доступ к приватной зоне другого куска кода, то в 99,(9) случаев это означает, что сама по себе архитектура ущербна. Таких ситуаций быть не должно. Это - ошибка проектировщика. Классы - это способ разделения ответственности за работоспособность всей системы между отдельным кусками кода. Разные классы могут писать разные программисты. Поэтому, можно сказать, что классы - это способ разделения ответственности за работоспособность всей системы между отдельными программистами. Последний раз редактировалось _Bers; 12.01.2012 в 07:36. |
|
13.01.2012, 21:24 | #9 | |
Форумчанин
Регистрация: 25.11.2010
Сообщений: 164
|
Цитата:
Возможно Я Быдлокодер ©.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Класс внутри класса | Prontit | Общие вопросы Delphi | 16 | 07.10.2011 08:30 |
Обращение к из одной функции класса к другой того же класса,не указывая к какому объекту она относиться | zipwind | C++ Builder | 1 | 09.04.2011 17:18 |
Обращение к члену класса | _ILYA_ | Visual C++ | 2 | 13.10.2010 19:28 |
Обращение к строке внутри файла | AlexeyLed | Общие вопросы C/C++ | 3 | 04.03.2009 19:53 |
Программное обращение к свойствам файлов и их изменение | lemonhead | Общие вопросы Delphi | 1 | 24.07.2008 10:20 |