Объекты и классы

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; // Значение элемента
  
  // ...

};

Конструкторы и деструкторы

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

Создание объектов и вызов методов

Создание статических и динамических объектов

Вызов методов