Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Козак Н.В. Лекции Основы создания программ в Си...doc
Скачиваний:
24
Добавлен:
23.09.2019
Размер:
2.24 Mб
Скачать

Пример определений классов

Приведем простейший пример определений классов. Определим два класса, которые могли бы применяться в графической программе. Это классы точек и линий.

// Classesl.h: Пример двух геометрических классов.

//

const int MaxX = 200; // Максимальные значения координат.

const int MaxY = 200; //

struct Point // Класс точек.

{

int getX(void);

int getY (void);

void setPoint (int, int); private:

int x ;

int y;

};

class Line // Класс линий.

{

Point p0;

Point p1;

public:

Line(int x0, int y0, int xl, int yl); // Конструктор.

~Line(void); // Деструктор.

void show(void);

};

При работе в С++ с классами производится разделение заголовочных файлов (*.h) и файлов кода (*.cpp). Обычно в заголовочных файлах содержатся определения типов данных, классов, структур, прототипов функций, перечислений и макросов препроцессора.

Определение класса начинается с ключевых слов class, struct или union. И структуры, и классы, и объединения относятся к «классовым» типам C++.

Ключевые слова private и public называются спецификаторами доступа. Спецификатор private означает, что элементы данных и элементы-функции, размещенные под ним, доступны только функциям-элементам данного класса. Это так называемый закрытый доступ.

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

Спецификатор защищенного доступа protected, означает, что элементы в помеченном им разделе доступны не только в данном классе, но и для функций-элементов классов, производных от него.

Структуры и классы отличаются только доступом по умолчанию. Элементы, не помеченные никаким из спецификаторов, в структурах имеют доступ public (открытый); в классах — private (закрытый).

Элементы данных класса совершенно аналогичны элементам структур в С, за исключением того, что для них специфицирован определенный тип доступа. Объявления элементов-функций аналогичны прототипам обычных функций.

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

В классе могут быть объявлены две специальные функции. Это конструктор и деструктор. Класс Line в примере объявляет обе эти функции.

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

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

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