Три краеугольных камня ООП: инкапсуляция, наследование и полиморфизм. Инкапсуляция защищает данные и скрывает детали реализации. Наследование позволяет создавать новые классы на основе существующих, а полиморфизм обеспечивает гибкость через переопределение методов.
Это механизм объединения данных и методов, работающих с этими данными, в единый объект. Это также скрывает внутреннюю реализацию объекта от внешнего мира и предоставляет доступ к данным только через методы.
class Account {
private:
double balance;
public:
Account(double initial_balance) : balance(initial_balance) {}
void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
}
}
double getBalance() const {
return balance;
}
};
Это механизм, позволяющий создавать новый класс на основе существующего. Новый класс наследует атрибуты и методы базового класса, что позволяет повторно использовать код и добавлять новую функциональность.
class Shape {
public:
virtual double area() const = 0; // Чисто виртуальная функция
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() const override {
return 3.14159 * radius * radius;
}
};
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double area() const override {
return width * height;
}
};
Это способность объектов различных классов быть обработанными через единый интерфейс. Это позволяет одной и той же функции работать с разными типами объектов.
#include <iostream>
#include <vector>
void printArea(const Shape& shape) {
std::cout << "Area: " << shape.area() << std::endl;
}
int main() {
Circle circle(5);
Rectangle rectangle(4, 6);
std::vector<Shape*> shapes = {&circle, &rectangle};
for (const auto* shape : shapes) {
printArea(*shape); // Полиморфный вызов
}
return 0;
}
Ставь 👍 и забирай 📚 Базу знаний