Как вытащить атрибут?

3 ноября 2014 г. Просмотров: 741
При работе с объектами и другими экземплярами класса обращение к атрибутам является одной из обычных операций для программиста. Получить доступ к тем или иным данным, хранящимся в объектах, бывает непросто, если учесть используемые для них способы защиты. Так, атрибуты, закрытые спецификаторами private и protected, вытащить из экземпляра класса можно лишь в методе, принадлежавшем объекту этого же или дочернего (для protected) класса.

Инструкция

  • Создайте объект или указатель на экземпляр класса, атрибут которого вам необходим в программе. Стандартная конструкция для такой операции: CMyClass myObj1. Иногда для инициализации объекта в конструктор класса необходимо передать определенные параметры. В этом случае запись создания объекта может выглядеть так: CMyClass myObj1(param1, param2, param3), где CMyClass – имя класса, myObj1 – имя создаваемого объекта, а в скобках перечисляются все запрашиваемые конструктором параметры. Указатель на экземпляр класса создается следующим образом: CMyClass *рObj1 = new CMyClass (param1, param2, param3).
  • Самый простой случай вызова атрибута – прямое обращение к нему в любом месте программы. Однако это возможно лишь для открытых данных, описанных в классе с модификатором public. Прямой доступ через объект выглядит так: myObj1.attr1, где attr1 – атрибут данного класса. Для указателя вызов будет таким: рObj1–>attr1.
  • Если атрибут, к которому вам необходимо обратиться, имеет статус скрытого и описан в классе с модификатором private, то доступ к нему возможен лишь из метода, принадлежащего тому же классу. Метод или функция класса при этом должна иметь открытый статус public. Добавьте в класс новый метод, где пропишите обработку необходимого атрибута. При этом в функцию могут передаваться параметры, в зависимости от значения которых производятся те или иные действия. Сама функция также может возвращать данные, например содержимое атрибута. Код программы на языке С++, реализующий обе функции для работы с закрытым атрибутом:class CMyClass { protected: int attr1; // атрибут public: void funcA1(int param) { attr1 = param; } int funcA2() { return attr1; }};
  • Таким образом, чтобы установить в закрытый атрибут attr1 нужное вам значение, вызовите метод того же класса с помощью созданного ранее объекта: myObj1.funcA1(10) – подобной неявной операцией в атрибут attr1 помещается значение 10. При работе с указателем на экземпляр класса аналогичная операция будет выглядеть так: рObj1–>funcA(10). Для того чтобы вытащить закрытый атрибут attr1 и узнать хранящееся в нем значение, вызовите другой метод класса: int Res = myObj1.funcA2(). В данном случае целочисленной переменной Res присвоится значение скрытой переменной класса.
  • При необходимости вызова атрибута со статусом protected во всех объектах дочерних классов обратитесь к его переменной напрямую. Однако при работе в функциях чужих классов доступ к защищенным данным придется получать вышеописанным способом.
  • Для вызова атрибута без создания объекта объявите его переменную в классе, как статическую с помощью следующей конструкции: static int attr1. В этом случае вытащить атрибут можно будет в любом месте программного кода, указав запись: CMyClass::attr1.
  • Оцените статью!