Классы и объекты в 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Только через указатель