Класс является фундаментальным понятием объектно-ориентированного
программирования. Являясь расширением понятия структуры, он позволяет
создавать типы данных и определять функции (методы), которые задают
поведение этого типа. Например, класс «точка» обладает координатами x, y и
функцией Move (переместить), которая изменяет координаты точки. Каждый
представитель (экземпляр) класса называется объектом.
Определение класса
Определение класса напоминает определение структуры в С, за исключением
того, что:
• Содержит одну или несколько спецификаций доступа, задаваемых с
помощью ключевых слов public, protected и private;
• Вместо ключевого слова struct применяется ключевое слово class;
• Включает в себя функции (методы) наряду с элементами данных;
• Обычно имеются специальные функции, такие, как конструктор (функция с
именем, что и сам класс) и деструктор (функция, именем которой является
сам класс с префиксом-тильдой (~)).
Управление доступом
В языке С элементы структуры доступны для любой функции в пределах
области действия структуры, что часто приводит к неверным изменениям
данных внутри структуры из-за невнимательности (нарушается принцип
инкапсуляции). В С++ можно ограничить доступ к данным и методам
(функциям класса) при помощи спецификаторов доступа: private, protected,
public. Метка-спецификатор действует на все следующие за ней объявления,
пока не встретится следующая метка или кончится определение класса.
Таблица 1
Задание №1
Объявить класс «Прямоугольник», заданный четырьмя координатами.
Предусмотреть метод изменения размеров и функцию вычисления площади
прямоугольника.
Элементы класса
Элементы класса делятся на две основные категории:
• Элементы данных (иногда называемые членами класса);
• Элементы-функции (иногда называемые методами или функциями-членами
класса);
Элементы данных.
Элементы-данные похожи на элементы структур языка с некоторыми
дополнениями.
• Элементы-данные не могут определяться как auto, extern или register.
5 Объектно-ориентированное программирование на С++.
• Элементами данных могут быть перечислимые типы, битовые поля или
представители ранее объявленных классов.
• Элементом данных не может быть представитель самого этого класса.
• Элементом данных класса может являться указатель или ссылка на
представитель этого класса.
Пример №2
class A
{
int aa;
int bb;
void C();
};
class B
{
register int a; // Ошибка! Объявлено как register.
int aa; // OK. Объявление скалярного типа.
unsigned ui[10]; // OK. Объявление массива.
B b; // Ошибка! Представитель самого класса B.
B* pb; // ОК. Указатель на класс B.
A a; // OK. Класс A объявлен.
A* pa; // OK. Указатель на класс А.
};
Задание №2
Определить класс «точка» (см. Пример №1). Переработать ранее
определённый класс «прямоугольник», где элементами данных «координаты»
являются представители класса «точка». Применить различные
спецификаторы доступа (private, protected, public) для защиты данных класса.
Элементы-функции
Элемент-функция является функцией, объявленной (описанной) внутри
определения класса. Тело функции может определяться внутри определения
класса; в этом случае функция называется встроенной (inline). Когда тело
функции определяется вне класса, перед именем функции ставится префикс из
имени класса и операции разрешения видимости (::).
Общий формат:
[<возвращаемое значение>] [<спецификаторы функции>]
<Класс>::<функция>([<параметры>])
6 Объектно-ориентированное программирование на С++.
Пример №3
В примере функция Move реализована как встроенная.
class Point // class Point (точка)
{
private:
int x;
int y;
public:
void Move ( int newX, int newY)
{
x = newX;
y = newY;
return;
}
};
Пример №4
В примере функция Move реализована вне класса Point
class Point // class Point (точка)
{
private:
int x;
int y;
public:
void Move ( int newX, int newY);
};
void Point::Move ( int newX, int newY)
{
x = newX;
y = newY;
return;
}
Задание №3
В ранее определённом классе «Прямоугольник» реализовать метод изменения
размеров фигуры как встроенный. Реализовать метод вычисления площади
фигуры вне тела класса.
7 Объектно-ориентированное программирование на С++.
Доступ к элементамданных
Функции-элементы находятся в области действия класса, котором они
определены. Обычные функции или методы другого класса могут получить
доступ к элементам данных и к методам с помощью операции . или –>,
применяемых соответственно к представителю или указателю на представитель
класса.
Пример №4
class Point
{
public:
int x;
int y;
void Move(int newX, int newY);
};
Примера №4 (продолжение)
int main()
{
Point pt; // Создать локальный объект
Point * ppt = new Point; // создать указатель на объект.
// работа с локальным объектом
pt.x = 0;
pt.y = 10;
pt.Move(0, 10);
// работа с указателем на объект
ppt->Move(10, 20);
ppt->x = 10;
ppt->y = 20;
delete ppt; // Удалить объект
return 0;
}
8
Помните, что если Вы создаёте локальный объект, он будет
автоматический разрушен при выходе из подпрограммы, где он создан.
Динамически создаваемые объекты не разрушаются до тех пор, пока Вы
сами их не удалите посредством оператора delete. Объектно-ориентированное программирование на С++.
Задание №4
Создать локальный объект класса «Прямоугольник», ранее определённого.
Задать его координаты и вывести на печать площадь фигуры.
Задание №5
Динамически создать объект класса «Прямоугольник», ранее определённого.
Задать его координаты и вывести на печать площадь фигуры. |