Классы и объекты в C++

Классы и объекты в C++: объявление класса, поля, методы, конструктор, деструктор и ключевое слово this.

Класс — это шаблон (чертёж), по которому создаются объекты. Объект хранит данные (поля) и умеет что-то делать (методы).

Объявление класса

#include <iostream>
#include <string>

class Dog {
public:                         // секция public — доступно снаружи
    std::string name;
    int age;

    void bark() {
        std::cout << name << " говорит: Гав!\n";
    }
};

int main() {
    Dog d;          // создаём объект
    d.name = "Шарик";
    d.age = 3;
    d.bark();
    return 0;
}

Вывод:

Шарик говорит: Гав!

Конструктор

Конструктор вызывается автоматически при создании объекта. Имя совпадает с именем класса, нет возвращаемого типа.

#include <iostream>
#include <string>

class Dog {
public:
    std::string name;
    int age;

    // Конструктор: инициализируем поля через список инициализации
    Dog(std::string n, int a) : name(n), age(a) {
        std::cout << name << " родился!\n";
    }

    void info() {
        std::cout << name << ", возраст " << age << "\n";
    }
};

int main() {
    Dog d("Барбос", 2);   // вызов конструктора
    d.info();
    return 0;
}

Вывод:

Барбос родился!
Барбос, возраст 2

Деструктор

Деструктор вызывается при уничтожении объекта. Имя — тильда + имя класса. Используется для освобождения ресурсов.

class Resource {
public:
    Resource()  { std::cout << "Захват ресурса\n"; }
    ~Resource() { std::cout << "Освобождение ресурса\n"; }
};

int main() {
    Resource r;   // конструктор
    std::cout << "Работаем...\n";
}   // деструктор вызывается здесь — при выходе из main

Вывод:

Захват ресурса
Работаем...
Освобождение ресурса

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

Поля private недоступны снаружи класса — только через методы (геттеры/сеттеры). Это защищает данные от некорректного изменения.

#include <iostream>

class BankAccount {
private:
    double balance;    // нельзя менять напрямую снаружи

public:
    BankAccount(double b) : balance(b) {}

    void deposit(double amount) {
        if (amount > 0) balance += amount;
    }

    double getBalance() const { return balance; }
};

int main() {
    BankAccount acc(1000.0);
    acc.deposit(500.0);
    std::cout << "Баланс: " << acc.getBalance() << "\n";
    // acc.balance = -999;  — ошибка компиляции!
    return 0;
}

Вывод:

Баланс: 1500

Коротко

  • Класс — шаблон; объект — экземпляр класса. Поля хранят данные, методы — поведение.
  • Конструктор инициализирует объект при создании; деструктор — при уничтожении.
  • public — доступно всем; private — только внутри класса.
  • Инкапсуляция защищает данные: меняем только через публичные методы.
Проверьте себя
1. Когда вызывается деструктор объекта?
AПри вызове метода delete()
BПри выходе из области видимости или явном delete
CТолько вручную
DРаз в секунду
2. Что означает модификатор private у поля класса?
AПоле удаляется после создания
BПоле доступно только внутри класса
CПоле доступно везде
DПоле нельзя изменять
3. Можно ли в C++ создать объект абстрактного класса?
AДа
BНет — только через наследника
CТолько в main
DТолько через указатель
Поддержать проект