Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_cpp.doc
Скачиваний:
10
Добавлен:
07.06.2015
Размер:
2.81 Mб
Скачать

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

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

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

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::), а не по имени объекта класса.

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