Работа с классами в C++
19.02.2025
Классы в C++ — это основа объектно-ориентированного программирования (ООП). Они позволяют объединять данные (поля) и методы (функции) в единую сущность. Использование классов делает код более структурированным и удобным для расширения.
Определение класса
Класс объявляется с помощью ключевого слова class
, после которого указываются его поля (переменные) и методы (функции).
Пример простого класса:
Здесь x
и y
— это поля класса, а класс Point
представляет точку с координатами.
Конструкторы классов
Конструктор — это специальная функция, которая вызывается при создании объекта. Он нужен для инициализации переменных.
Пример конструктора с параметрами:
Важно: Если не определить конструктор вручную, компилятор создаст его автоматически.
Инкапсуляция: private
и public
private
и public
Инкапсуляция — это ограничение доступа к данным внутри класса. В C++ есть три уровня доступа:
private
— доступ только внутри класса.public
— доступ открыт для всех.protected
— используется при наследовании (рассматривается ниже).
Пример инкапсуляции:
Здесь model
и speed
закрыты (private
), и изменить их можно только через сеттеры setModel()
и setSpeed()
.
Наследование
Один класс может наследовать свойства другого, используя public
, private
или protected
наследование.
Пример:
Теперь Dog
наследует метод makeSound()
и может его переопределить.
Полиморфизм: Виртуальные функции
Полиморфизм позволяет вызывать переопределённые методы через указатель на базовый класс.
Пример:
Ключевое слово virtual
позволяет правильно вызывать метод makeSound()
у производного класса.
Разбор кода с проверкой значений в конструкторе
Код:
Разбор:
Конструктор корректирует координаты:
Если
x
отрицательный, ноy
положительный →x = 0
.Если
y
отрицательный, ноx
положительный →y = 0
.Если оба отрицательные → оба становятся
0
.
Вывод:
Point test(10, -10);
→x = 10
,y = 0
.test.print();
→ Выведетx 10 y 0
.
Оптимизированный вариант конструктора:
Этот вариант работает так же, но код стал короче и читаемее.
Заключение
Классы позволяют структурировать код и избегать дублирования логики. Важные принципы:
Инкапсуляция (скрытие данных, сеттеры и геттеры).
Наследование (переиспользование кода,
public
,protected
,private
).Полиморфизм (
virtual
-функции для переопределения методов).
Last updated