Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Proga_shpory.docx
Скачиваний:
44
Добавлен:
25.03.2015
Размер:
102.57 Кб
Скачать

53.Объекты и классы. Описание классов. Объявление объектов.

Классы и объекты

Класс является абстрактным типом данных определенным пользователем и объединяет данные и функции, их обрабатывающие в единое целое. Данные класса называются полями, а функции – методами.

Формат описания:

class имя_класса

{

[private:]

// личные данные и

// функции

[protected:]

// //защищенные данные и функции

[public:]

// общие данные и функции

};

К личным данным можно обратиться только через методы, описанные в разделе public. К функциям, описанным в private, могут обращаться только функции класса. Данные и функции, описанные в разделе protected, используются при наследовании. Функции в разделе public доступны всем функциям, находящимся вне класса.

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

class mon

{

int hed, amm;

public:

mon(int he=100, int am=10)

{hed=he; amm=am;}

void draw(int x, int y, int s, int pos);

int get_h( )

{return hed ;}

int get_a( )

{return amm;}

};

В этом классе два закрытых поля. Получить их значения можно с помощью 2-х функций – get_h() и get_a(). Все методы класса имеют непосредственный доступ к скрытым полям. Если тело метода определяется в классе, то он является встроенной функцией - inline функцией. Если в классе дано описание функции, то сам метод должен быть определен в другом месте программы. Для того чтобы указать, что эта функция является членом класса, в ее заголовке указывают принадлежность к классу с помощью операции :: .

void mon :: draw(int x, int y, int s, int pos)

{тело функции}

Конкретные переменные типа заданного класса называются экземплярами класса или объектами. Время жизни и видимости объектов зависит от вида и места их описания, и подчиняется общим правилам принятым C++.

mon vasa;

mon s(50); // описан объект s с инициализацией первого поля класса

mon st[50]; // массив объектов

mon *B; // указатель на объект

mon &c=vasa; // ссылка на объект vasa

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

Доступ к полям объекта похож на обращение к полям структуры.

2 Способа вызова:

1) через имя объекта с использованием операции

2) через указатель на объект ->

int n=vasa.get_h( );

st[5].draw(10,10,10,10);

int c=B->get_a( );

54Указатель this.

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

return this; //указатель

return *this; // ссылка

Указатель this используется для идентификации поля класса в том случае, если его имя совпадает с именем формального аргумента.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]