Вопрос задан 26.10.2023 в 04:39. Предмет Информатика. Спрашивает Гардиенко Диана.

Вам потрібно розробити систему для обробки музичних композицій різних жанрів та видів: пісні та

інструментальні треки. Для кожної композиції потрібно визначити назву, тривалість та жанр. Створіть базовий клас Composition, який містить назву, тривалість та методи для виведення інформації про композицію. Від класу Composition успадкуйте два підкласи: Song (пісня) та InstrumentalTrack (інструментальний трек). Клас Song має поле genre (жанр) та методи для визначення жанру пісні. Клас InstrumentalTrack має поле instrument (інструмент) та методи для визначення інструменту у треці. Реалізуйте методи для виведення інформації про композицію в кожному з підкласів. Створіть функцію void ProcessComposition(Composition *composition), яка приймає вказівник на об'єкт класу Composition і використовує оператори static_cast та dynamic_cast для виконання обробки композиції в залежності від її типу. Створіть декілька об'єктів різних типів композицій, помістіть їх в масив вказівників на базовий клас Composition і викличте функцію ProcessComposition для кожного з них. НА МОВІ С++
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Кот Мира.

Ответ:

#include <iostream>

#include <string>

using namespace std;

class Composition {

protected:

   string title;

   int duration;

public:

   Composition(string title, int duration) : title(title), duration(duration) {}

   virtual void PrintInfo() {

       cout << "Title: " << title << endl;

       cout << "Duration: " << duration << endl;

   }

};

class Song : public Composition {

private:

   string genre;

public:

   Song(string title, int duration, string genre) : Composition(title, duration), genre(genre) {}

   void PrintInfo() override {

       cout << "Title: " << title << endl;

       cout << "Duration: " << duration << endl;

       cout << "Genre: " << genre << endl;

   }

   void SetGenre(string genre) {

       this->genre = genre;

   }

};

class InstrumentalTrack : public Composition {

private:

   string instrument;

public:

   InstrumentalTrack(string title, int duration, string instrument) : Composition(title, duration), instrument(instrument) {}

   void PrintInfo() override {

       cout << "Title: " << title << endl;

       cout << "Duration: " << duration << endl;

       cout << "Instrument: " << instrument << endl;

   }

   void SetInstrument(string instrument) {

       this->instrument = instrument;

   }

};

void ProcessComposition(Composition *composition) {

   cout << "=== Processing composition ===" << endl;

   composition->PrintInfo();

   Song* song_ptr = dynamic_cast<Song*>(composition);

   if (song_ptr) {

       cout << "This is a song." << endl;

       // Perform logic specific to Song.

   }

   else {

       InstrumentalTrack* inst_track_ptr = dynamic_cast<InstrumentalTrack*>(composition);

       if (inst_track_ptr) {

           cout << "This is an instrumental track." << endl;

           // Perform logic specific to InstrumentalTrack.

       }

   }

}

int main() {

   const int NUM_COMPOSITIONS = 3;

   Composition* compositions[NUM_COMPOSITIONS];

   Song song("Bohemian Rhapsody", 367, "Rock");

   InstrumentalTrack inst_track1("Moon River", 160, "Piano");

   InstrumentalTrack inst_track2("Linus and Lucy", 146, "Jazz");

   compositions[0] = &song;

   compositions[1] = &inst_track1;

   compositions[2] = &inst_track2;

   for (int i = 0; i < NUM_COMPOSITIONS; i++) {

       ProcessComposition(compositions[i]);

       cout << endl;

   }

   return 0;

}

#################################
Программа выводит следующий результат:
=== Processing composition ===

Title: Bohemian Rhapsody

Duration: 367

Genre: Rock

This is a song.

=== Processing composition ===

Title: Moon River

Duration: 160

Instrument: Piano

This is an instrumental track.

=== Processing composition ===

Title: Linus and Lucy

Duration: 146

Instrument: Jazz

This is an instrumental track.

####################################
@C++

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Ось приклад реалізації вашої задачі на мові C++:

cpp
#include <iostream> #include <string> class Composition { public: Composition(const std::string& title, int duration) : title(title), duration(duration) {} void ShowInfo() const { std::cout << "Title: " << title << ", Duration: " << duration << " seconds" << std::endl; } private: std::string title; int duration; }; class Song : public Composition { public: Song(const std::string& title, int duration, const std::string& genre) : Composition(title, duration), genre(genre) {} void ShowInfo() const { Composition::ShowInfo(); std::cout << "Genre: " << genre << " song" << std::endl; } std::string GetGenre() const { return genre; } private: std::string genre; }; class InstrumentalTrack : public Composition { public: InstrumentalTrack(const std::string& title, int duration, const std::string& instrument) : Composition(title, duration), instrument(instrument) {} void ShowInfo() const { Composition::ShowInfo(); std::cout << "Instrument: " << instrument << " track" << std::endl; } std::string GetInstrument() const { return instrument; } private: std::string instrument; }; void ProcessComposition(Composition* composition) { composition->ShowInfo(); if (dynamic_cast<Song*>(composition)) { Song* song = dynamic_cast<Song*>(composition); std::cout << "This is a " << song->GetGenre() << " song." << std::endl; } else if (dynamic_cast<InstrumentalTrack*>(composition)) { InstrumentalTrack* track = dynamic_cast<InstrumentalTrack*>(composition); std::cout << "This is an " << track->GetInstrument() << " track." << std::endl; } } int main() { Song song("My Song", 180, "Pop"); InstrumentalTrack track("Guitar Solo", 120, "Guitar"); Composition* compositions[] = {&song, &track}; for (Composition* comp : compositions) { ProcessComposition(comp); std::cout << "------------------------" << std::endl; } return 0; }

У цьому коді ми створили базовий клас Composition, а потім успадкували його у класи Song та InstrumentalTrack. Кожен клас має власні поля та методи для виведення інформації про композицію. Функція ProcessComposition приймає вказівник на об'єкт класу Composition, використовує dynamic_cast для визначення типу композиції та виводить відповідну інформацію.

У main створюються об'єкти різних типів композицій, поміщаються в масив вказівників на базовий клас і викликається функція ProcessComposition для кожного об'єкта.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос