Що це?
Об'єктно-орієнтоване програмування (ООП) є ключовим підходом до розробки програмного забезпечення. Мова програмування С++ є однією з найбільш популярних мов програмування, яка підтримує ООП. У цій статті ми розглянемо основні принципи ООП в С++ та надамо приклади коду.
Класи і об'єкти Класи є основою ООП в С++. Класи описують властивості та поведінку об'єктів. Об'єкти є екземплярами класів і представляють конкретні елементи, які можуть взаємодіяти з іншими об'єктами. Для оголошення класу використовують ключове слово "class", а для оголошення об'єкта - ім'я класу, за яким слідує назва об'єкта у дужках.
Приклад оголошення класу і об'єкта в С++:
// Оголошення класу "Person"
class Person {
public:
std::string name;
int age;
};
// Оголошення об'єкта "person1" класу "Person"
Person person1;
person1.name = "John";
person1.age = 30;
Інкапсуляція
Інкапсуляція - це принцип ООП, який дозволяє приховувати внутрішню реалізацію об'єкта від зовнішнього світу. Це забезпечує високий рівень захисту даних і сприяє зручності управління об'єктами. В С++ інкапсуляцію можна досягти за допомогою модифікаторів доступу, таких як "public", "private" та "protected".
Приклад використання інкапсуляції в С++:
class BankAccount {
private:
std::string accountNumber;
double balance;
public:
// Конструктор з параметрами
BankAccount(std::string accNum, double initBalance) {
accountNumber = accNum;
balance = initBalance;
}
// Метод, що змінює баланс рахунку
void deposit(double amount) {
balance += amount;
}
// Метод, що повертає баланс рахунку
double getBalance() {
return balance;
}
};
int main() {
// Створюємо об'єкти класу BankAccount з різними параметрами
BankAccount acc1("12345", 1000);
BankAccount acc2("67890", 500);
// Використовуємо метод deposit() для зміни балансу обох рахунків
acc1.deposit(500);
acc2.deposit(1000);
// Виводимо на екран баланси обох рахунків
std::cout << "Баланс рахунку " << acc1.getAccNumber() << ": " << acc1.getBalance() << std::endl;
std::cout << "Баланс рахунку " << acc2.getAccNumber() << ": " << acc2.getBalance() << std::endl;
return 0;
}
В цьому прикладі, ми використали модифікатори доступу "private" та "public", щоб приховати змінну accountNumber від зовнішнього світу, а також дозволити доступ до методів deposit та getBalance.
Спадкування
Спадкування - це принцип ООП, який дозволяє створювати новий клас на основі вже існуючого класу, утримуючи властивості та методи попереднього класу. У С++ спадкування реалізується за допомогою ключового слова "public" або "private", яке вказує рівень доступу до властивостей та методів базового класу в похідному класі.
Приклад використання спадкування в С++:
// Базовий клас
class Animal {
public:
void eat() {
std::cout << "Animal is eating\n";
}
};
// Похідний клас
class Dog : public Animal {
public:
void bark() {
std::cout << "Woof!\n";
}
};
int main() {
// Створення об'єкта похідного класу
Dog dog;
// Виклик методу базового класу з похідного класу
dog.eat();
// Виклик методу похідного класу
dog.bark();
}
У цьому прикладі ми створили базовий клас "Animal", який має метод "eat". Потім ми створили похідний клас "Dog", який спадкує метод "eat" з базового класу і має свій власний метод "bark". На останок ми створили об'єкт похідного класу "Dog" та викликали методи "eat" та "bark".
Поліморфізм
Поліморфізм - це принцип ООП, який дозволяє об'єктам одного класу виконувати різні дії, залежно від контексту, у якому вони використовуються. У С++ поліморфізм можна досягти за допомогою віртуальних функцій.
Приклад використання поліморфізму в С++:
// Базовий клас
class Shape {
public:
// Віртуальний метод
virtual double getArea() = 0;
};
// Похідний клас Rectangle
class Rectangle : public Shape {
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
// Реалізація віртуального методу
double getArea() override {
return width * height;
}
};
int main() {
Rectangle r1(3, 4);
Rectangle r2(5, 6);
Shape* shapes[2];
shapes[0] = &r1;
shapes[1] = &r2;
for (int i = 0; i < 2; i++) {
std::cout << "Shape " << i << " has area " << shapes[i]->getArea() << std::endl;
}
return 0;
}
У цьому прикладі ми створили базовий клас "Shape", який має віртуальний метод "getArea". Потім ми створили два похідних класи - "Rectangle" та "Circle", які перевизначають метод "getArea" з базового класу. На останок ми створили масив об'єктів базового класу "Shape", які можуть бути або "Rectangle", або "Circle". Під час виклику методу "getArea" для кожного об'єкту, С++ автоматично визначає, який саме метод потрібно викликати - той, який визначений в базовому класі, або той, який перевизначений в похідному класі.
Висновок
У цій статті ми розглянули основні принципи ООП в мові програмування С++, такі як інкапсуляція, спадкування та поліморфізм. Ми також навели приклади коду, щоб краще проілюструвати ці принципи. Нехай ця стаття допоможе вам краще зрозуміти ООП та зробить вас кращим програмістом.
https://t.me/r4w3ss