Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_08_Классы-VC++7-2003.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
946.18 Кб
Скачать

18

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

Тема: Классы

Цель

  • Изучение основных концепций объектно-ориентированного программирования (наследование, инкапсуляция, полиморфизм)

  • Изучение назначения, правил объявления и реализации классов C++.

  • Усвоение правил доступа к членам классов (модификаторы доступа).

  • Составление консольных приложений с использованием классов.

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

Объектно-ориентированное программирование (ООП)

Объекты и классы – две фундаментальные концепции объектно-ориентированных языков программирования типа C++. ООП было изобретено для того, чтобы большие программы можно было разделять на отдельные фрагменты, каждый из которых предназначен для решения отдельной задачи; эти фрагменты и называют объектами. Объекты обладают большими возможностями, чем простые функции и переменные, поскольку в них могут содержаться как функции, так и переменные, что облегчает работу с ними.

Три базовых понятия олицетворяют ООП:

  • Инкапсуляция – объединение как данных, характеризующих все объекты определенного класса, так и функций, с помощью которых эти данные обрабатываются (методов). Скрытие данных – это запрет на доступ к внутренней структуре данных напрямую; для доступа создают специальные функции – методы доступа.

  • Наследование – возможность повторного использования кода.

  • Полиморфизм – поведение, обеспечиваемое виртуальными функциями (единообразное обращение к разным реализациям одной виртуальной функции объектов родительского и дочернего классов).

Понятие класса

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

class [tag [: base-list ]] { member-list } [declarators]; [ class ] tag declarators;

где

  • class – ключевое слово типа класса;

  • tag – идентификатор (имя) пользовательского типа класса (имя становится зарезервированным словом в пределах видимости класса);

  • base-list – список базовых классов; каждое имя базового класса может предшествовать спецификатор доступа (public, protected, private);

  • member-list – список объявлений членов класса (данных и функций); явная инициализация данных недопустима; класс может содержать указатель или ссылку на себя;

  • declarators –имена объектов класса.

Например, рассмотрим объявление класса CParent Он наследует все данные и функции базового класса CBase и объявляет дополнительно свои собственные данные (переменные Y, Num, Den, X) и функции (CParent(), ~CParent(), Method(), get_Y()):

class CParent : public CBase

{

public:

CParent();

CParent(double Value);

virtual ~CParent();

private:

double Y;

protected:

double Num;

double Den;

public:

double X;

virtual double Method();

double get_Y();

};

Объект класса CParent может быть объявлен статически ParentObject или динамически pParentObject:

CParent ParentObject(0.1);

CParent* pParentObject = new CParent(0.2); // выделяем динамическую память

delete pParentObject; // освобождаем динамическую память

Структура C является частным случаем класса. Структура C++ может содержать не только данные, но и методы – функции, обрабатывающие эти данные. Данные и методы структуры C++ по умолчанию являются доступными извне (public) а класса – закрытыми (private).

Доступ к данным и функциям класса

К конкретным членам класса (аналогично структуре) можно обратиться с использованием оператора . (точка) или оператора разыменования указателя ->. Например:

cout << " Argument = " << ParentObject.X << endl;

cout << " Final Y = " << pParentObject->get_Y() << endl;

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