Способы доступа к элементам класса . 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Способы доступа к элементам класса .



В Си++ можно ограничить видимость данных и функций класса при помощи специальных меток.

В зависимости от выбранной метки происходит следующее:

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

При метке public элементы данных и функций элементов классов доступны для любых функций программы, в которой имеется представитель класса.

При метке protected элементы данных и функции элементов доступны для функций элементов данного класса и классов производных от него.

Метка – спецификатор доступа применяется ко всем элементам класса, следующего за ней. пока не встретится другая метка или не закончится определение.

 

Конструктор и деструктор.

Специальная функция – элемент класса конструктор вызывается компилятором всегда, когда создается представитель класса. Конструктор является функцией элементом с тем же именем, что и ее класс. Если никаких конструкторов не определено, то компилятор генерирует конструктор по умолчанию, не имеющий параметров. Для конструктора не указывают возвратный тип и он не может возвращать значения. Как правило в теле конструктора инициализируются элементы данных класса, хотя конструктор является обычной функцией и в его теле можно писать все что угодно. Определение конструктора может содержать список инициализации, который определяется:: под заголовка определения функции и содержит элементы данных, разделяющих «,».

Деструктор является специальной функцией, элементы которой вызываются при гибели объекта класса и должна производить необходимую отчистку обхекта перед освобождением памяти. Деструктор не может иметь аргумента.

 

Конструктор копии. Операция присваивания.-

Конструктор копий вызывается всякий раз, когда представитель класса при создании инициализируется при помощи уже существующего представителя этого класса. Если конструктор копий не предусмотрен, то будет сгенерирован конструктор копий по умолчанию, который


создаст новую точную копию.


Class proverka {int a,b;

Public: proverka (int aa,int bb):a(aa);b(bb){}

Proverka (const proverka &sonya)

{a=sonya.a;

B=sonya.b+6666;}

};

Void main(){

Proverka sasha (25;25);

Proverka elkin=sasha;}

Операция присваивания является функцией элемента с именем operator=, которая принимает в качестве параметра ссылку или константную ссылку на представитель класса. Операция присваивания вызывается компилятором, когда уже существующему представителю класса присваивается в качестве значения еще существующий представитель класса. Если операция присваивания не создана, то присваивание осуществляет копирование.

 

25) Преобразование объектов класса в другие типы и их получение из других типов.

Объект класса можно преобразовывать в другие типы с помощью операций приведений типа:

A=(float)t/5;

В классе можно определять элементы функций, которые будут обеспечены явным преобразованием типа данного класса в другие типы. Заголовок имеет вид: operator имя_типа ().

Процедура преобразования не может иметь параметр и для нее нет необходимости определять тип возвращаемого значения.

 

Перегрузка операций.

Язык Си++ позволяет переопределять для классов существующие обозначения операций. В Результате для классов можно использовать операции привычные для базовых типов. Обычно программисты стараются перегружать таким образом, чтобы смысл знаков операций не менялся.

Функции операций, реализующие перегрузку операций имеют вид:

тип возвращаемого значения_operator_знак операции (операнды).

Если функция является элементом класса, то первый операнд соответствующей операции будет самим объектом для которого вызвана функция операции. В случае унарной операции список параметров будет пуст, для бинарной имеет 1 параметр, соответствующий второму операнду.

Если функция операции не является элементом класса, она будет иметь 1 параметр в случае унарной, и 2 в случае бинарной. Тернарная не может быть перегружена. Приоритет и правило вычисления остается для перегруженных таким же, что и для операций над встроенными типами. Поведение операции по отношению к встроенному типу изменить нельзя. Если функция операция не является членом класса, то хотя бы 1 из ее параметров должен быть типом класса. Аргументов по умолчанию функция операция иметь не может.

Class proverka {int a,b;

Public:proverka (i(nt aa,int bb):a(aa);b(bb));{}

Proverka operator + (const proverka &);

};

Proverka proverka::operator +(const proverka &zaval)

{proverka marazm(0,0);

Marazm.a=a+zaval.a;

Marazm.b=b+zaval.b;

Return marazm;

}

Void main ()

{proverka q(10,10);

Proverka w(6,6);

Proverka summa(0,0);

Summa=q+w;

}

 

Дружественные функции.

Специальные спецификаторы доступа класса позволяют указывать: могут ли функции вне определенного класса обращаться к его элементам. Может возникнуть ситуация, когда потребуется обеспечить определенной функции или классу доступ к элементам данного класса, определенного как private или protected. Для обеспечения доступа используется ключевое слово friend, строка начинается с этого ключевого слова встроенного в качестве оператора описания в определении данного класса. Объявить другом можно другой класс целиком, функцию член другого класса или функцию, не являющуюся членом класса.

ПРИМЕРЫ!

Наследование классов.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 111; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.197.64.207 (0.026 с.)