Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ Программирование и основы алгоритмизации...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.5 Mб
Скачать

Использование класса (драйвер класса)

void main()

{ time t; //создание объекта t класса time

t.printtime(0; //00:00:00

t.settime(15, 20, 5);

t.printtime(); //15:20:05

t.settime(26, 80, 95);

t.printtime(); //00:00:00

}

Примечания.

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

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

  3. Функция-элемент может быть определена в теле класса (вместо прототипа), если она короткая.

  4. Для идентификации функций-элементов используется: <имя класса>::.

  5. Обычно класс имеет деструктор ~time(), который также входит в интерфейсную часть. Он объявляет свободной память, занимаемую объектом.

  6. Можно изменять реализацию класса до тех пор, пока не потребуется изменять интерфейс класса. Это значительно упрощает модификацию программ.

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

Доступ к элементам класса

void main()

{ time t, // создается объект t

*tptr=&t, // создается указатель tptr на объект t

&c=t; // создается ссылка c на объект t

t.settime(5, 12, 8); t.printtime(); // 05:12:08

c.settime(11, 3, 5); c.printtime(); // 11:03:05

tptr->settime(19, 26, 27); tptr->printtime();// 19:26:27

}

Примечания.

1) Переменные, объявленные в функции-элементе, известны только этой функции, и имеют область действия эту функцию. Если имя этой переменной совпадает с именем переменной в области действия класс (это имя данного-элемента) то данное-элемент доступно так: <имя_класса>::<имя_переменной>.

2) Доступ к закрытым данным-элементам должен контролироваться функциями доступа. Например, “получить” – int geth() {return h;}. Чтобы клиентам класса дать возможность изменять закрытые данные, класс должен иметь функцию установить- void seth(int);

Отделение интерфейса от реализации

Продавцы программного обеспечения поставляют заголовочные файлы и объектные модули (для скрытия информации). Исходных кодов в продаже нет. Это стимулирует продавцов программного обеспечения поставлять библиотеки классов для продажи или лицензирования.

При отделении интерфейса от реализации используются следующие директивы препроцессора:

#ifndef – проверка неопределенности идентификатора;

#endif – окончание условной директивы #ifndef;

#define – определение идентификатора или макроса:

#define имя_константы значение константы,

имя_константы – идентификатор макроса, значение_константы – замещающий_текст.

Макрос – это операция, обозначаемая символьными строками.

Заголовочный файл должен содержать только объявления классов, структур и функций. В нем нет исполняемых операторов. Можно включать только подставляемые функции (inline).

//----------------------------------------------------------------------------------------------

//TIME1_H

//Заголовочный файл. Содержит объявление класса.

#ifndef TIME1_H

#define TIME1_H

class time{

-----------

};

#endif

//----------------------------------------------------------------------------------------------

//TIME1_CPP

//Определение функций-элементов класса time

#include “time1.h”

…………………………………..

//----------------------------------------------------------------------------------------------

//TIME.CPP

//Драйвер класса time

#..........................

# include “time1.h”

void main()

{

…………..

}

//----------------------------------------------------------------------------------------------

Директива #ifndef совместно с директивой #endif позволяет организовать условную обработку текста программы.

В директиве #ifndef идентификатор проверяется условие – неопределен ли идентификатор, т.е. неопределен в директиве #define.

Объявление класса будет включено в программу, если неопределен идентификатор TIME1_H. Кроме того, директива является защитой от повторного включения файла с объявлением класса.

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