Я должен сделать два класса для студентов и преподавателей для библиотечной системы. Каждая часть кода одинакова как для студентов, так и для преподавателей, поэтому я подумал сделать шаблон для обоих классов. Но проблема заключается в том, что во время издания книги (участник берет книгу из библиотеки), студент может взять максимум 2 книги, а факультет - 10. Так что я сравниваю с нет. из книги в прошлом. Как мне разработать шаблон, чтобы при выдаче книги объекту «Студент» он сравнивался с 2, а с факультетом - с 10. Это возможно с шаблоном, или я должен создать отдельный класс для студента и факультета.
этот код в разделе ответа. Как вы можете видеть, у Студента и Факультета есть один и тот же кусок кода, кроме той строки сравнения 2 и 10. Разве это не дублирование? Можно ли как-нибудь сделать шаблон для объединения обоих классов. Итак, сравните с 2 для ученика и с 10 для другого.
std::string title_;
std::string description_;
};
class IMember {
public:
virtual void takeBook(Book book) = 0;
};
class Student : public IMember {
public:
virtual void takeBook(Book book) override {
if (num_books_ >= 2) {
throw std::out_of_range("Student can take only 2 books at the time !!");
}
books[num_books_++] = std::move(book);
}
private:
int num_books_ = 0;
Book books[2];
};
class Faculty : public IMember {
public:
virtual void takeBook(Book book) override {
if (num_books_ >= 10) {
throw std::out_of_range("Student can take only 10 books at the time !!");
}
books[num_books_++] = std::move(book);
}
private:
int num_books_ = 0;
Book books[10];
};