C++ является объектно-ориентированным языком и основным элементом программы является объект. Объект представляет собой набор данных и функции для их обработки. Данные объекта называются его состоянием. Общая структура однотипных объектов называется классом. Класс определяет структуру данных и набор функций, которые в терминологии C++ называются методами класса. Каждый объект, или иначе экземпляр класса, "заполняет" данную струтуру конкретными значениями — состоянием.
В качестве примера мы будем рассматривать класс для работы с матрицами действительных чисел. В этом случае объектами являются конкретные матрицы, состояние объекта — представление матрицы в виде одномерного массива, а класс — это определение действий, которые можно выполнять с матрицами.
Взаимодействие с объектами происходит в виде вызова методов.
Объявление класса похоже на объявление струкутры (struct) в языке Си. Более того, струкутра является частным случаем класса. В состав класса входят объявление данных, то есть структуры состояния объектов этого класса, и методов. Начнем с данных.
class Matrix {
private:
double *data_; // Данные
int nrows_; // Количество строк
int ncol_; // Количество столбцов
// ...
};
Каждый экземпляр этого класса обладает перечисленными данными:
указателем на double
и двумя целыми. Ключевое
слово private
означает, что доступ к этим членам класса
есть только у методов класса. Мы обсудим это позднее. Рассмотрим
объявление методов, то есть действий, которые можно выполнять с
объектами класса.
class Matrix {
// ...
public:
int nrows() const { return nrows_; }
int ncols() const { return ncols_; }
void inverse();
double get(int i, int j) const; // Значение элемента
// ...
};
Объекты могут иметь сложное состояние. Каждый класс может определять специальные методы, которые вызываются при создании новых объектов и при при удалении существующих. Эти методы называются конструкторами и деструктором, соответственно.