rectangle-historyРабота с классами в C++

19.02.2025

Классы в C++ — это основа объектно-ориентированного программирования (ООП). Они позволяют объединять данные (поля) и методы (функции) в единую сущность. Использование классов делает код более структурированным и удобным для расширения.

Определение класса

Класс объявляется с помощью ключевого слова class, после которого указываются его поля (переменные) и методы (функции).

Пример простого класса:

#include <iostream>
using namespace std;

class Point {
public:
    int x{ 0 };
    int y{ 0 };
};

int main() {
    setlocale(LC_ALL, "Russian");
    Point p;
    cout << "Координаты: " << p.x << ", " << p.y << endl;
    return 0;
}

Здесь x и y — это поля класса, а класс Point представляет точку с координатами.


Конструкторы классов

Конструктор — это специальная функция, которая вызывается при создании объекта. Он нужен для инициализации переменных.

Пример конструктора с параметрами:

Важно: Если не определить конструктор вручную, компилятор создаст его автоматически.


Инкапсуляция: private и public

Инкапсуляция — это ограничение доступа к данным внутри класса. В C++ есть три уровня доступа:

  • private — доступ только внутри класса.

  • public — доступ открыт для всех.

  • protected — используется при наследовании (рассматривается ниже).

Пример инкапсуляции:

Здесь model и speed закрыты (private), и изменить их можно только через сеттеры setModel() и setSpeed().


Наследование

Один класс может наследовать свойства другого, используя public, private или protected наследование.

Пример:

Теперь Dog наследует метод makeSound() и может его переопределить.


Полиморфизм: Виртуальные функции

Полиморфизм позволяет вызывать переопределённые методы через указатель на базовый класс.

Пример:

Ключевое слово virtual позволяет правильно вызывать метод makeSound() у производного класса.


Разбор кода с проверкой значений в конструкторе

Код:

Разбор:

  1. Конструктор корректирует координаты:

    • Если x отрицательный, но y положительный → x = 0.

    • Если y отрицательный, но x положительный → y = 0.

    • Если оба отрицательные → оба становятся 0.

  2. Вывод:

    • Point test(10, -10);x = 10, y = 0.

    • test.print(); → Выведет x 10 y 0.

Оптимизированный вариант конструктора:

Этот вариант работает так же, но код стал короче и читаемее.


Заключение

Классы позволяют структурировать код и избегать дублирования логики. Важные принципы:

  • Инкапсуляция (скрытие данных, сеттеры и геттеры).

  • Наследование (переиспользование кода, public, protected, private).

  • Полиморфизм (virtual-функции для переопределения методов).

Last updated