Помогите решить задание на с++
Класс МУЗЫКАНТ + классы ЛИЧНОСТЬ, ЗРИТЕЛЬ.
Реализовать схему наследования классов и корректно распределить по классам данные: имя, фамилия, пол, год рождения, инструмент, рейтинг, место в зале, стаж (количество концертов).
Интерфейс посетителя концерта IVisitor с методом void visit(). Для музыканта
посещение концерта означает наращивание количества концертов на 1, а также
изменение рейтинга на некоторую величину (по результатам концерта). Для зрителя посещение означает назначение ему первого свободного места (список свободных мест хранится в файле; при резервировании места оно удаляется из списка в файле). В main() создать 1 музыканта и 3 зрителей, продемонстрировать полиморфизм visit().
Ответы
class Person {
protected:
string firstName;
string lastName;
char gender;
int yearOfBirth;
public:
Person(string firstName, string lastName, char gender, int yearOfBirth)
: firstName(firstName), lastName(lastName), gender(gender), yearOfBirth(yearOfBirth) {}
virtual void visit() = 0; // pure virtual function
};
class Musician : public Person {
private:
string instrument;
int rating;
int numberOfConcerts;
public:
Musician(string firstName, string lastName, char gender, int yearOfBirth,
string instrument, int rating, int numberOfConcerts)
: Person(firstName, lastName, gender, yearOfBirth),
instrument(instrument), rating(rating), numberOfConcerts(numberOfConcerts) {}
void visit() override {
++numberOfConcerts;
// change rating according to results of the concert
}
};
class Viewer : public Person {
private:
int placeInHall;
public:
Viewer(string firstName, string lastName, char gender, int yearOfBirth, int placeInHall)
: Person(firstName, lastName, gender, yearOfBirth), placeInHall(placeInHall) {}
void visit() override {
// assign viewer the first free seat and remove it from the list in the file
}
};
int main() {
Musician musician("John", "Smith", 'M', 1990, "guitar", 5, 10);
Viewer viewer1("Jane", "Doe", 'F', 1980, 1);
Viewer viewer2("Bob", "Johnson", 'M', 1985, 2);
Viewer viewer3("Alice", "Williams", 'F', 1995, 3);
musician.visit();
viewer1.visit();
viewer2.visit();
viewer3.visit();
return 0;
}