
Лабораторная работа № 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;
…
Объекты класса можно присваивать, передавать в качестве аргументов и возвращать в качестве значений функций.