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

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

Під час роботи з об 'єктами та іншими екземплярами класу звернення до атрибутів є однією зі звичайних операцій для програміста. Отримати доступ до тих чи інших даних, що зберігаються в об 'єктах, буває непросто, якщо врахувати використовувані для них способи захисту. Так, атрибути, закриті специфікаторами 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. Додайте до класу новий метод, де пропишіть обробку необхідного атрибута. При цьому у функцію можуть передаватися параметри, залежно від значення яких робляться ті чи інші дії. Сама функція також може повертати дані, наприклад вміст атрибута. Код програми мовою C++, який реалізує обидві функції для роботи із закритим атрибутом: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.