Як витягнути атрибут.

При роботі з об'єктами та іншими екземплярами класу звернення до атрибутам є однією зі звичайних операцій для програміста. Отримати доступ до тих чи інших даних, що зберігаються в об'єктах, буває непросто, якщо врахувати використовувані для них способи захисту. Так, атрибути, закриті специфікаторами private і protected, витягнути з екземпляра класу можна лише в методі, який належав об'єкту цього ж або дочірнього (для protected) класу.
Інструкція
1
Створіть об'єкт або покажчик на екземпляр класу, атрибут якого вам необхідний в програмі. Стандартна конструкція для такої операції: CMyClass myObj1. Іноді для ініціалізації об'єкта в конструктор класу необхідно передати певні параметри. У цьому випадку запис створення об'єкта може виглядати так: CMyClass myObj1 (param1, param2, param3), де CMyClass - ім'я класу, myObj1 - ім'я створюваного об'єкта, а в дужках перераховуються всі запитувані конструктором параметри. Покажчик на екземпляр класу створюється наступним чином: CMyClass * рObj1 = new CMyClass (param1, param2, param3).
2
Найпростіший випадок виклику атрибуту - пряме звернення до нього в будь-якому місці програми. Однак це можливо лише для відкритих даних, описаних в класі з модифікатором public. Прямий доступ через об'єкт виглядає так: myObj1.attr1, де attr1 - атрибут даного класу. Для покажчика виклик буде таким: рObj1-> attr1.
3
Якщо атрибут, до якого вам необхідно звернутися, має статус прихованого і описаний в класі з модифікатором private, то доступ до нього можливий лише з методу, що належить тому ж класу. Метод або функція класу при цьому повинна мати відкритий статус public. Додайте в клас новий метод, де пропишіть обробку необхідного атрибуту. При цьому в функцію можуть передаватися параметри, залежно від значення яких виробляються ті чи інші дії. Сама функція також може повертати дані, наприклад вміст атрибута. Код програми на мові С ++, що реалізує обидві функції для роботи з закритим атрибутом: class CMyClass {protected: int attr1;//Атрибут public: void funcA1 (int param) {attr1 = param; } Int funcA2 () {return attr1; }};
4
Таким чином, щоб встановити в закритий атрибут attr1 потрібне вам значення, викличте метод того ж класу за допомогою створеного раніше об'єкта: myObj1.funcA1 (10) - подібної неявній операцією в атрибут attr1 поміщається значення 10. При роботі з покажчиком на екземпляр класу аналогічна операція буде виглядати так: рObj1-> funcA (10). Для того щоб витягнути закритий атрибут attr1 і дізнатися що зберігається в ньому значення, викличте інший метод класу: int Res = myObj1.funcA2 (). В даному випадку цілочисельний змінної Res присвоїться значення прихованої змінної класу.
5
При необхідності виклику атрибута зі статусом protected у всіх об'єктах дочірніх класів зверніться до його змінної безпосередньо. Однак при роботі у функціях чужих класів доступ до захищених даних доведеться отримувати вищеописаним способом.
6
Для виклику атрибута без створення об'єкта оголосіть його змінну в класі, як статичну за допомогою наступної конструкції: static int attr1. У цьому випадку витягнути атрибут можна буде в будь-якому місці програмного коду, вказавши запис: CMyClass :: attr1.