Классы

Класс позволяет объединить данные и действия в один собственный тип. Например, мотор имеет мощность, а рядом с ней удобно хранить действия: задать мощность, остановить мотор, вывести состояние.
Класс описывает тип. Объект — конкретный экземпляр этого типа. Поля хранят данные объекта. Методы выполняют действия объекта.
Структура класса
#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;
}
Конструктор имеет то же имя, что и класс, и не пишет тип результата.
Практика
- Создайте класс
Motorс полемpowerи методомstop. - Создайте два объекта
leftиright. - Сделайте поле
powerзакрытым. - Добавьте метод
set, который ограничивает значение от-100до100. - Добавьте конструктор, который задаёт начальное значение
0.
Проверьте себя
- Чем класс отличается от объекта?
- Что такое поле?
- Что такое метод?
- Для чего нужен
private? - Что делает конструктор?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
| Термин | Значение |
|---|---|
| класс | описание собственного типа |
| объект | конкретный экземпляр класса |
| поле | переменная внутри объекта |
| метод | функция внутри класса |
public | открытая часть класса |
private | закрытая часть класса |
| конструктор | метод создания начального состояния объекта |
Связанные темы
- Функции — методы похожи на функции внутри класса.
- Именование — имена классов и объектов.
- Продолжаем изучать классы — больше о проверке состояния.
Источники
- C++ Working Draft. Classes: https://eel.is/c++draft/class
- Microsoft Learn. Classes and structs: https://learn.microsoft.com/en-us/cpp/cpp/classes-and-structs-cpp