
- •1. Пользовательский тип — класс
- •Объявление класса
- •Пример 1.
- •Конструктор
- •Объявление объекта
- •Реализация класса
- •Реализация конструктора
- •Создание объектов
- •Пример 2.
- •2. Примеры классов
- •Класс Temperature
- •Реализация класса Temperature
- •Класс случайных чисел
- •Пример 3.
- •Реализация класса RandomNumber
- •3. Объекты и передача информации
- •Объект как возвращаемое значение
- •Объект как параметр функции
- •4. Массивы объектов
- •Конструктор умолчания
- •5. Множественные конструкторы
- •Реализация класса Date
- •6. Практическое применение: Треугольные матрицы
- •Свойства верхней треугольной матрицы
- •Хранение треугольной матрицы
- •Пример 4.
- •Пример 5.
- •Класс TriMat
- •Реализация класса TriMat
Выше были даны абстрактные типы данных (ADT) и их представление в качестве классов C++. Это введение описывает структуру класса, которая обеспечивает инкапсуляцию данных и скрытие информации. В этой главе содержится более полное описание базовых концепций класса. Здесь рассматриваются разработка и использование конструкторов класса, реализация методов класса и использование классов с другими структурами данных. Для обеспечения хорошего понимания классов читателем приводится широкий диапазон примеров, которые используются в законченных программах. Выбранные соответствующим образом ADT иллюстрируют связь между абстрактной структурой и объявлением класса.
1. Пользовательский тип — класс
К
private:
данные
операторы
Члены класса public:
Данные
операторы
Внешние программные единицы
Рис. 1.1. Доступ к методам класса
Объявление класса
Объявление класса начинается с заголовка класса (class head), состоящего из зарезервированного слова class, за которым следует имя класса. Члены класса определяются в теле класса (class body), которое заключается в фигурные скобки и заканчивается точкой с запятой. Зарезервированные слова public и private разделяют члены класса, и эти спецификаторы доступа заканчиваются двоеточием. Члены класса объявляются как переменные C++, а методы задаются как объявления функций C++. Общая форма объявления класса такова:
class Class_Name
{
private: //Закрытые данные
//Объявление закрытых методов
//
public: //Открытые данные
//Объявление открытых методов
//
};
Следует, по возможности, помещать члены класса в закрытую секцию. В результате этого значение данных обновляется только функцией-членом класса. Это предотвращает нежелательные изменения в данных кодом использующего класс приложения.
Пример 1.
Класс Rectangle
При геометрических измерениях прямоугольник определяется его длиной и шириной. Это позволяет нам вычислять периметр и площадь фигуры. Параметры длины и ширины и операции объединяются для образования абстрактного типа данных прямоугольной фигуры. Вы должны самостоятельно подготовить спецификацию ADT в качестве упражнения, освоив самостоятельно главу 1, а здесь будет разработан класс Rectangle C++, который реализует этот ADT. Класс содержит конструктор и набор методов — GetLength, PutLength, GetWidth и PutWidth, имеющих доступ к закрытым членам класса. Объявление класса Rectangle следующее:
class Rectangle
{
private:
//длина и ширина прямоугольного объекта
float length, width
public:
//конструктор
Rectangle(float l=0, float w=0);
//методы для нахождения и изменения закрытых данных
float GetLength(void) const;
void PutLength(float 1);
float GetWidth(void) const;
void PutWidth(float w);
//вычислять и возвращать измерения прямоугольника
float Perimeter(void) const;
float Area(void) const; I
}
Обратите внимание, что методы GetLength, GetWidth, Perimeter и Area имеют ключевое слово const после списка параметров. Это объявляет каждый метод как константный. В определении константного метода никакой элемент данных не может быть изменен. Иначе, выполнение метода, объявленного как const, не изменяет состояния объекта Rectangle.
Если первый спецификатор доступа опускается, начальные члены в классе являются закрытыми по умолчанию. Члены класса являются закрытыми до первого появления открытой или защищенной спецификации. C++ позволяет программисту чередовать закрытую, защищенную и открытую секции, хотя это обычно не рекомендуется.