声明此双精度而无法更改.hpp文件

时间:2015-12-03 03:53:20

标签: c++

我已经完成了这个图书馆模拟器的编写工作,但我对这个基本问题感到有些困惑。我必须实施这个"逾期费用"这是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?
            }
         }
      }
   }
}

1 个答案:

答案 0 :(得分:1)

你的cpp文件中的

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) {也会做同样的事情。
  • 罚款所需的天数(21)也应该是一个常数。