我已经完成了这个图书馆模拟器的编写工作,但我对这个基本问题感到有些困惑。我必须实施这个"逾期费用"这是10美分,但我不允许改变教授为我提供的.hpp文件。 如果我在我的cpp文件中将DAILY_FINE声明为静态const double,我会收到错误吗?
对不起基本问题!
标题:
//Library.hpp
#ifndef LIBRARY_HPP
#define LIBRARY_HPP
#include <string>
#include <vector>
#include "Patron.hpp"
class Library {
private:
std::vector<Book*> holdings;
std::vector<Patron*> members;
int currentDate;
public:
Library();
void addBook(Book*);
void addPatron(Patron*);
std::string checkOutBook(std::string pID, std::string bID);
std::string returnBook(std::string bID);
std::string requestBook(std::string pID, std::string bID);
std::string payFine(std::string pID, double payment);
void incrementCurrentDate();
Patron* getPatron(std::string pID);
Book* getBook(std::string bID);
};
#endif
cpp(我关注的部分)
/******************************************
** Description: incrementCurrentDate function
*******************************************/
void Library::incrementCurrentDate() {
currentDate++;
cout < "Current Date has been changed from " << currentDate-1
<< " to " << currentDate << endl;
int i=0;
for (i=0; i<members.size(); i++) {
vector<Book*> checkedOut = members[i].getCheckedOutBooks();
if (!checkedOut.empty()) {
for (int x=0; x<checkedOut.size(); x++) {
int length = (currentDate - (*checkedOut[x]).getDateCheckedOut());
if (length>21) {
cout << " (" << (*checkedOut[x].getTitle() << " is overdue)" << endl;
members[i].amendFine(DAILY_FINE); //Where would I declare DAILY_FINE as .10?
}
}
}
}
}
答案 0 :(得分:1)
static const double DAILY_FINE = 0.1
是有道理的。或static constexpr double DAILY_FINE = 0.1
如果你有C ++ 11。
其他几条评论:
for (i=0; i < members.size(); i++)
可以是for (int i = 0; ...
,然后您就不必在循环外声明i
。if (!checkedOut.empty())
后跟checkedOut
所有内容的循环是多余的;如果checkedOut
为空,则永远不会输入循环。for (int x=0; ...
代替for (auto x = checkedOut.cbegin(); x != checkedOut.cend(); ++x) {
,然后您可以像下面这样访问向量的元素:(*x)->getDateCheckedOut()
。如果你没有C ++ 11,for (std::vector<Book*>::const_iterator x = checkedOut.begin(); x != checkedOut.end(); ++x) {
也会做同样的事情。