Перейти к основному содержимому

Классы

Класс двигателя и два отдельных объекта в программе робота

Класс позволяет объединить данные и действия в один собственный тип. Например, мотор имеет мощность, а рядом с ней удобно хранить действия: задать мощность, остановить мотор, вывести состояние.

Коротко

Класс описывает тип. Объект — конкретный экземпляр этого типа. Поля хранят данные объекта. Методы выполняют действия объекта.

Структура класса

#include <iostream>
using namespace std;

class Motor {
public:
int power;

void stop() {
power = 0;
}
};

int main() {
Motor left;
left.power = 80;

cout << left.power << endl;
left.stop();
cout << left.power << endl;
return 0;
}

Вывод:

80
0

Motor — класс. left — объект. power — поле. stop — метод.

Два объекта

#include <iostream>
using namespace std;

class Motor {
public:
int power;

void stop() {
power = 0;
}
};

int main() {
Motor left;
Motor right;

left.power = 80;
right.power = 60;

left.stop();

cout << left.power << endl;
cout << right.power << endl;
return 0;
}

У каждого объекта своё поле power. Остановка left не меняет right.

public и private

Открытые поля легко случайно испортить:

left.power = 100000;

Лучше закрыть поле и менять его через метод.

#include <iostream>
using namespace std;

class Motor {
public:
void set(int value) {
if (value < -100) {
value = -100;
}
if (value > 100) {
value = 100;
}
power = value;
}

void stop() {
power = 0;
}

void print() {
cout << power << endl;
}

private:
int power = 0;
};

int main() {
Motor left;

left.set(120);
left.print();
left.stop();
left.print();
return 0;
}

Вывод:

100
0

private запрещает внешнему коду напрямую менять поле. Метод set проверяет значение.

Методы защищают поле от неверного значения

Конструктор

Конструктор выполняется при создании объекта. Он задаёт начальное состояние.

#include <iostream>
using namespace std;

class Motor {
public:
Motor() {
power = 0;
}

void set(int value) {
power = value;
}

void print() {
cout << power << endl;
}

private:
int power;
};

int main() {
Motor left;
left.print();
return 0;
}

Конструктор имеет то же имя, что и класс, и не пишет тип результата.

Практика

  1. Создайте класс Motor с полем power и методом stop.
  2. Создайте два объекта left и right.
  3. Сделайте поле power закрытым.
  4. Добавьте метод set, который ограничивает значение от -100 до 100.
  5. Добавьте конструктор, который задаёт начальное значение 0.

Проверьте себя

  1. Чем класс отличается от объекта?
  2. Что такое поле?
  3. Что такое метод?
  4. Для чего нужен private?
  5. Что делает конструктор?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

  • формулируете основную мысль своими словами;
  • называете важные условия, ограничения или меры безопасности;
  • для схемы, кода или расчёта показываете ход решения и ожидаемый результат.

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

ТерминЗначение
классописание собственного типа
объектконкретный экземпляр класса
полепеременная внутри объекта
методфункция внутри класса
publicоткрытая часть класса
privateзакрытая часть класса
конструкторметод создания начального состояния объекта

Связанные темы

Источники