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

Элементы класса

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

Элементы-функции

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

Вот несколько модифицированный класс Point из предыдущей главы вместе с его реализацией:

#include <assert.h>

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

const int MaxY = 200; //

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

{

private:

int fx;

int fy; public:

int getX(void) { return fx; }

int getY(void) { return fy; }

void setPoint(int, int);

};

В файле кода размещаем реализацию функции setPoint

#include “Classesl.h”

void Point::setPoint (int x, int y)

{

assert(x >= 0 && x < MaxX);

assert(y >= 0 && у < MaxY);

fx = x;

fy = y;

}

Т.о. обе функции get() определены как встроенные, а функция setPoint() определяется вне тела класса и не является встроенной

Элементы данных

Элементы данных аналогичны элементам структур языка С. Стоит добавить следующее:

  • Они не могут быть объявлены как auto, extern или register;

  • Они могут быть перечислениями, битовыми полями, а также объектами ранее объявленных классов.

  • Элемент данных класса не может быть представителем самого класса.

  • Элемент данных класса может быть указателем или ссылкой на сам класс.

Класс как область действия

В языке С выделялось несколько различных типов области действия: глобальная, файл, функция, блок, прототип. В C++ вводится новый вид области действия — класс. Имена элементов класса расположены в области действия класса, и из функций данного класса к ним можно обращаться непосредственно. Получить доступ к элементам класса можно в следующим образом:

  • Для существующего представителя класса с помощью операции доступа к элементу (точки).

  • Через указатель на существующий представитель с помощью операции косвенного доступа к элементу (стрелки).

class Time

{

public:

int hour;

int min;

void setTime(int h, int m)

{ hour = h; min = m; }

void showTime(void)

{ printf ("Time: %02d: %02d. \n", hour, min);}

};

#include “MyTime.h”

int main ()

{

Time start; // Локальный объект Time.

Time *pTime = Sstart; // Указатель на локальный объект*.

start.hour = 17; // Операция доступа к элементу.

pTime->min = 30; // Косвенный доступ к элементу.

start.setTime(17, 15); // Вызов элемента для объекта start.

pTime->showTime(); // Вызов элемента через указатель на объект.

return 0;

}

К функциям класса можно обращаться из функций того же класса просто по имени. Обычные функции и функции других классов могут вызывать функции данного класса для существующих его представителей с помощью операций "." или "->" (при использовании указателя).