【发布时间】:2019-10-13 17:52:00
【问题描述】:
我必须为图书馆系统的学生和教师制作两个课程。学生和教师课程的每一部分代码都是相同的,所以我想为这两个课程制作模板。但问题是在图书发行过程中(会员从图书馆取书),学生最多可以取 2 本书,而教师最多可以取 10 本书。所以我在和no做比较。过去的书籍问题。我应该如何设计我的模板,在向 Student 对象发行书籍期间它与 2 进行比较,而在与 Faculty 进行比较时,它与 10 进行比较。 这是否可以使用模板或我应该为学生和教师单独上课。
有人在回答部分提到了这段代码。如您所见, Student 和 Faculty 具有相同的代码,除了比较行 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];
};
【问题讨论】:
-
什么意思?学生可以出书还是什么?还是拿两本书?
-
@DenisKotov 会员想从图书馆拿书几天在家看。
-
这看起来不是一个很好的模板应用程序。也许你想在这里使用继承,
-
您可能希望使用继承而不是模板。当代码除了数据类型(例如链表)相同时,我使用模板。有通用代码时,我重构为父类,使用继承或者做一个独立的函数。
-
@ThomasMatthews 我知道继承可以是一种选择,但除了比较之外,代码完全相同。 1 用它 2 做,而其他用 10 做。所以我认为应该在这里使用模板。