🤔 Назовите три краеугольных камня ООП?



Три краеугольных камня ООП: инкапсуляция, наследование и полиморфизм. Инкапсуляция защищает данные и скрывает детали реализации. Наследование позволяет создавать новые классы на основе существующих, а полиморфизм обеспечивает гибкость через переопределение методов.



🚩Инкапсуляция



Это механизм объединения данных и методов, работающих с этими данными, в единый объект. Это также скрывает внутреннюю реализацию объекта от внешнего мира и предоставляет доступ к данным только через методы.

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;

}




Ставь 👍 и забирай 📚 Базу знаний