Advertisement
Viktor_Profa

Лабораторна робота №5

Oct 27th, 2024
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. // Базовий клас "Музичний інструмент"
  7. class MusicalInstrument {
  8. protected:
  9.     string name;
  10.  
  11. public:
  12.     MusicalInstrument(string n = "Інструмент") : name(n) {}
  13.  
  14.     // Загальні методи для класу
  15.     virtual void show() const {
  16.         cout << "Інструмент: " << name << endl;
  17.     }
  18.    
  19.     void setName(string n) { name = n; }
  20.     string getName() const { return name; }
  21.  
  22.     // Віртуальний деструктор для коректного видалення похідних об'єктів
  23.     virtual ~MusicalInstrument() {}
  24. };
  25.  
  26. // Похідний клас "Ударний", відкритий тип успадкування
  27. class Percussion : public MusicalInstrument {
  28. private:
  29.     string type = "Ударний";
  30.  
  31. public:
  32.     Percussion(string n) : MusicalInstrument(n) {}
  33.  
  34.     void show() const override {
  35.         cout << "Інструмент: " << name << " (Тип: " << type << ")" << endl;
  36.     }
  37. };
  38.  
  39. // Похідний клас "Струнний", захищене успадкування
  40. class StringInstrument : protected MusicalInstrument {
  41. private:
  42.     string type = "Струнний";
  43.  
  44. public:
  45.     StringInstrument(string n) : MusicalInstrument(n) {}
  46.  
  47.     void show() const {
  48.         cout << "Інструмент: " << name << " (Тип: " << type << ")" << endl;
  49.     }
  50.  
  51.     using MusicalInstrument::getName; // Відновлення доступу до методу getName
  52.     using MusicalInstrument::setName; // Відновлення доступу до методу setName
  53. };
  54.  
  55. // Похідний клас "Духовий", закрите успадкування
  56. class WindInstrument : private MusicalInstrument {
  57. private:
  58.     string type = "Духовий";
  59.  
  60. public:
  61.     WindInstrument(string n) : MusicalInstrument(n) {}
  62.  
  63.     void show() const {
  64.         cout << "Інструмент: " << name << " (Тип: " << type << ")" << endl;
  65.     }
  66.  
  67.     // Відновлення рівня доступу до методів getName та setName
  68.     using MusicalInstrument::getName;
  69.     using MusicalInstrument::setName;
  70. };
  71.  
  72.  
  73. int main() {
  74.     // Створення масиву об'єктів класу "Музичний інструмент"
  75.     vector<MusicalInstrument*> orchestra;
  76.  
  77.     // Додавання об'єктів різних похідних класів до масиву
  78.     orchestra.push_back(new Percussion("Барабан"));
  79.     orchestra.push_back(new StringInstrument("Скрипка"));
  80.     orchestra.push_back(new WindInstrument("Флейта"));
  81.  
  82.     cout << "Склад оркестру:" << endl;
  83.  
  84.     // f. Перегляд масиву об'єктів і перевизначення методу show()
  85.     for (auto instrument : orchestra) {
  86.         instrument->show();  // Віртуальний виклик show() для кожного інструмента
  87.     }
  88.  
  89.     // Звільнення пам'яті
  90.     for (auto instrument : orchestra) {
  91.         delete instrument;
  92.     }
  93.  
  94.     return 0;
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement