#c #class #oop #vector #dynamic-arrays
Вопрос:
Дан класс Movie (id, title, ranking, release date, character number, ticket price, comment etc.)
, enum type: ACTION, COMEDY, DRAMA, FANTASY etc.
и класс Cinema (name, location)
. Мне нужно написать функцию calculateProfit ( Movie*, day)
, которая рассчитывала бы прибыль кинотеатра на основе определенного дня. Также мне нужно написать метод выбора фильма на основе некоторых параметров и отсортировать фильмы по дате релиза. Я размышлял над этой проблемой уже несколько дней, но, похоже, я просто не могу написать правильный код.
Здесь я перечислил свои основные трудности:
- Как правильно обработать это перечисление, оно не может быть передано объекту конструктором, который я использовал для передачи всего остального?
- Я не знаю, как связать эти фильмы с конкретным днем. Как я могу создать вектор в классе Cinema, сформированный путем многократного(или, может быть, есть лучший способ сделать это?) добавления объектов класса Movie, чтобы он сделал свое дело?
- Как получить список всех объектов класса Movie, которые имеют одинаковые конкретные атрибуты?
- У меня есть идея, как написать алгоритм для сортировки массива дат выпуска. Но проблема в том, чтобы поместить эти даты в массив/вектор. Как я могу перебирать атрибуты объектов в C , чтобы вставить их в свой вектор?
Вот краткий шаблон для моих занятий:
using namespace std;
class Movie{
public:
int ID;
string Title;
int Ranking;
string ReleaseDate;
int CharacterNumber;
int TicketPrice;
string Comment;
//SortingByDate
enum type{
ACTION, COMEDY, DRAMA, FANTASY
};
Movie(int, string, int, string, int, int, string, type);
Movie();
};
Movie::Movie(int ID, string Title,int Ranking,string ReleaseDate,int CharacterNumber, int TicketPrice,string Comment, type Type){
this->ID=ID;
this->Title=Title;
this->Ranking=Ranking;
this->ReleaseDate=ReleaseDate;
this->CharacterNumber=CharacterNumber;
this->TicketPrice=TicketPrice;
this->Comment=Comment;
//this->type=Type; //How to pass enums like this using a constructor?
}
class Cinema{
private:
int calculateProfit();
public:
//Vector with objects of Movie class
string name;
string location;
};
Комментарии:
1. Вы задаете сразу несколько вопросов, что делает очень маловероятным, что один ответ будет адекватно охватывать все. Q1 очень прост: вы определили перечисление
Movie::type
, фактически не создавая поля. Измените это наenum type { ... } Type;
.2. Для Q2: поскольку фильм не принадлежит кинотеатру (он может появляться в нескольких кинотеатрах одновременно, рассмотрите возможность создания глобальной структуры данных, содержащей
Movie
объекты, и предоставления каждомуCinema
astd::vector<Movie*>
(или лучше:std::vector<std::shared_ptr<Movie>>
), чтобы он мог ссылаться на глобальныйMovie
экземпляр.3. Для Q3 и Q4: вы не можете перебирать атрибуты в C . Вам нужно будет написать функцию селектора, которая проверяет данный атрибут и что-то делает с результатом. Я предлагаю вам задать последующий вопрос по этому поводу.
4. @Botje моя главная борьба здесь заключалась в том, как именно создать такую структуру и как сформировать этот вектор объектов фильма
5.
std::vector<Movie> movies;
и просто позвоните.push_back()
или.emplace_back()
позвоните по нему, пока вы читаете (откуда-то) спецификации фильма. В качестве альтернативы используйте astd::map<std::string, Movie>
, если вам дают фильмы по имени. Я не могу ответить на этот вопрос за вас; я не знаю полного задания, которое вам дали.