Контрольные вопросы для подготовки и самостоятельной работы. Лабораторная работа №20. Разработка программ с использованием классов




Контрольные вопросы для подготовки и самостоятельной работы

1 Какая функция применяется для установки видеорежима, инициализации графического режима работы?

2 Что означают параметры функций в приведенном примере?

3 Как закрыть графический режим работы?

4 Можно ли получить и установить координаты курсора на экране? В чём измеряются эти координаты?

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

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

Лабораторная работа №20

Разработка программ с использованием классов

(2 часа)

Цель работы: изучить синтаксические конструкции для объявления, определения и использования классов. Разобраться с особенностями использования классов в языке С.

Теоретические сведения

Объект - это абстрактная сущность, наделённая характеристиками объектов реального мира. В С объекты играют очень важную роль. Всё, чем манипулирует программа, может рассматриваться как объект (экземпляр) определённого класса. При выполнении программы объекты создаются и удаляются. Они взаимодействуют с другими объектами и могут быть помещены в массивы, списки, группы, коллекции, и т.д.

Объекты в С - это программные конструкции (переменные), формируемые так называемыми классами. Определение переменной класса (объекта) также называется созданиемэкземпляра класса. За создание своих классов полную ответственность несёт сам программист. Но он может получить доступ и к классам, разработанным другими программистами. Например, к классам, которые находятся в библиотеке контейнеров или библиотеке потоков компилятора C.

Объявление и определение класса

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

Для того, чтобы использовать класс, его нужно вначале объявить точно так же, как это делается со структурами. И так же как для структур, полное объявление класса может появиться в программе только один раз. Рассмотрим пример объявления простого класса:

class Counter { // имя типа Counter

long count; // данное-член класса, объявлено в разделе private по умолчанию

public: // разделён public, данные доступны из программы

void SetValue (long); // функции-члены класса, объявлены в разделе public

long GetValue ();

};

Ключевое слово class вводит объявление класса. Далее следует имя класса (Counter). Тело класса должно заключаться в фигурные скобки, после которых стоит точка с запятой. Классы могут содержать не только объявления функций, но и их полные определения inline- функции. Функции внутри классов могут быть настолько длинными и сложными, насколько это необходимо.

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

Для идентификаторов класса применимы те же правила, что и для остальных типов или имён переменных. В С для идентификаторов предельная длина не определена, но в Borland C максимальная длина равна 32 символам. По умолчанию все 32 символа являются значащими. Регистры букв (строчная или прописная) в идентификаторах различаются.

 

Тело класса

Переменная count объявлена внутри класса. Таким образом, count - это переменная-член - ( данное-член ) класса. Любая переменная, определённая в классе, имеет область видимости класса. Область видимости переменной-члена простирается от точки её объявления в классе до конца объявления класса.

В С данные и функции-члены, объявленные внутри класса, не содержат спецификацию класса памяти (кроме static ) и лексически принадлежат области действия данного класса.

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

Класс Counter содержит объявление функций SetValue () и GetValue (), которые называются функциями-членамикласса. Эти функции пока не определены, они только объявлены. Как и другие функции в С, функции-члены должны быть объявлены до использования. Объявление должно быть полным, включая тип возвращаемого значения и типы аргументов.

Пример

void Counter::Setvalue (long value) { count = value; // изменение значения // данного-члена count } long Counter::GetValue () { return count; //вернуть значение // данного члена count }

При определении функции-члена после типа возвращаемого значения указывается, членом какого класса является функция. Для этого нужно написать имя класса и поставить за ним два двоеточия– оператор разрешения области видимости.

Формат определения функции –члена класса.

Определение функций для класса Counter обычно осуществляется в других модулях:

< Тип_ возвращаемого_значения> <Имя_ класса>::

<Имя_функции> (<Объявления_ параметров >)

{<Тело _функции>}

Доступ к членам класса в общем случае осуществляется с помощью нотации

<Имя_объекта> <Имя_члена_класса>,

кроме функций-членов, которые имеют прямой доступ к данным-членам.

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

Напpимеp:

struct outer

{

typedef int tint; // выражение outer::tint - это синоним типа int tint x;

struct inner// выражение outer::inner - это вложенная структура (класс)

{static int x;}; // статическая переменная (член) структуры типа inner

tint y;

int f(); // функция-член структуры типа outer.

}

int outer::f() // определение функции-члена структуры типа outer

{

tint y1=х; // х видим и доступен здесь, т.к. функции–члены имеют доступ к //данным-членам класса (структуры)

return у1;

}

outer::inner::x=5; // опpеделение статического данного-члена класса

outer:: tint у=2;

Доступ к статическому данному-члену класса осуществляется по имени класса (outer:: inner::), а не по имени объекта класса.

 

Использование класса

Для того чтобы использовать класс, нужно объявить (создать) объект этого класса. Объекты класса определяются точно так же, как структурные или скалярные переменные. Объявление класса должно предшествовать использованию класса. Пользователю предоставляется описание класса, но не обязательно его внутренняя реализация. Чтобы объявить переменную (объект) people типа Counter, используется следующую запись:

Counter people; // аналогично объявлению любой переменной int a ;

Counter* ptr // аналогично int* p ;

 

Для вызова функции-члена объекта класса используется та же запись, что и для обращения к элементу структуры: за точкой следует имя элемента people.GetValue(). Аналогичен вызов и при использовании указателей
ptr-> GetValue() В остальном использование функций-членов ничем не отличается от использования традиционных функций С.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: