Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция9.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
124.42 Кб
Скачать

Объектно-ориентированное

ПРОГРАММИРОВАНИЕ С++

1. Классы

Класс С++ представляет собой сложный тип данных, похожий на стандартную структуру в С.

Ключевое слово: class

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

Данные, определенные внутри класса, называются элементами данных класса, а функции, определенные внутри класса, называются методами данного класса.

Пример:

class CRectangle

{ int Left; // элементы данных класса

int Top; // элементы данных класса

int Right; // элементы данных класса

int Bottom; // элементы данных класса

void Draw() // метод – компонентная

// функция

{ Line(Left, Top, Right, Top);

Line(Right, Top, Right, Bottom);

Line(Right, Bottom, Left, Bottom);

Line(Left, Bottom, Left, Top);

}

}

Метод класса может ссылаться непосредственно на элементы данных без специального синтаксиса.

Создание экземпляра класса:

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

Пример: CRectangle Rect;

Rectэкземпляр класса или объект класса CRectangle.

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

Создать экземпляр класса можно и динамически с помощью оператора new:

CRectangle *PRect=new CRectangle;

Удаление:

delete PRect;

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

По умолчанию все компоненты класса определены как личные (private). Это означает, что они могут использоваться только внутри методов данного класса. Так, для функции Draw() разрешен доступ к элементам данных Top, Left, Right, Bottom, так как Draw() – метод класса CRectangle.

Однако для других частей программы (например, функции main()) не разрешен доступ к элементам данных и запрещен вызов функции Draw().

Чтобы сделать компоненты доступными для всех функций в программе, используется спецификация доступа public.

Спецификатор доступа прилагается ко всем компонентам, которые стоят после него (пока не встретится другой спецификатор доступа).

class CRectangle

{ public:

Int Left; // элементы данных класса

int Top; // элементы данных класса

int Right; // элементы данных класса

int Bottom; // элементы данных класса

void Draw() // метод – компонентная

// функция

{ Line(Left, Top, Right, Top);

Line(Right, Top, Right, Bottom);

Line(Right, Bottom, Left, Bottom);

Line(Left, Bottom, Left, Top);

}

}

Когда все компоненты CRectangle общедоступны, к ним возможен доступ с использованием оператора точка (.):

Пример:

CRectangle Rect;

Rect.Left=5;

Rect.Top=10;

Rect.Right=100;

Rect.Bottom=150;

Rect.Draw();

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

Пример:

CRectangle *PRect=new CRectangle;

Rect->Left=5;

Rect->Top=10;

Rect->Right=100;

Rect->Bottom=150;

Rect->Draw();

Инкапсуляция:

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

Текущий вариант класса CRectangle явно нарушает этот принцип. Следуя принципу инкапсуляции, в классе CRectangle должен быть общий доступ к методу Draw() и запрет на доступ к элементам данных класса.

Пример:

class CRectangle

{ private:

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