C++ Operator Overload Writing Time class objects to a file

Description

C++ Operator Overload Writing Time class objects to a file

 
#include <cctype>
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using std::string;
 
class Time//  w w  w . j a  v a2  s.c  o  m
{
  private:
    int hours {};
    int minutes {};
    int seconds {};
 
  public:
    Time() = default;
    Time(int h, int m, int s);
 
    int getHours()const { return hours; }
    int getMinutes()const { return minutes; }
    int getSeconds()const { return seconds; }
 
    friend std::istream& operator>> (std::istream& in, Time& rT);  // Friend extraction operator
};
 
std::ostream& operator <<(std::ostream& out, const Time& rT);      // Overloaded insertion operator declaration
 
// Constructor
Time::Time(int h, int m, int s)
{
  seconds = s%60;                      // Seconds left after removing minutes
  minutes = m + s/60;                  // Minutes plus minutes from seconds
  hours = h + minutes/60;              // Hours plus hours from minutes
  minutes %= 60;                       // Minutes left after removing hours
}
 
// Insertion operator
std::ostream& operator <<(std::ostream& out, const Time& rT)
{
  out << ' ' << rT.getHours() << ':';
  char fillCh {out.fill('0')};                             // Set fill for leading zeros
 
  out << std::setw(2) << rT.getMinutes() << ':'
      << std::setw(2) << rT.getSeconds() << ' ';
  out.fill(fillCh);                                        // Restore old fill character
  return out;
}
 
// Extraction operator
std::istream& operator>> (std::istream& in, Time& rT)
{
  char ch {};                                              // Stores ':'
  in >> rT.hours >> ch >> rT.minutes >> ch >> rT.seconds;
 
  // Ensure seconds and minutes less than 60
  rT.minutes += rT.seconds/60;
  rT.hours += rT.minutes/60;
  rT.minutes %= 60;
  rT.seconds %= 60;
  return in;
}
int main()
{
  string fileName;
  std::cout << "Enter the name of the file you want to write, including the path: ";
  std::getline(std::cin, fileName);
  std::ofstream outFile {fileName};
  if(!outFile)
  {
    std::cerr << "Failed to open output file. Program terminated.\n";
    exit(1);
  }
 
  Time period;
  char ch {'n'};
 
  do
  {
    std::cout << "Enter a time as hours:minutes:seconds, and press Enter: ";
    std::cin >> period;
    outFile << period;
    std::cout << "Do you want to enter another?(y or n): ";
    std::cin >> ch;
  }while(std::toupper(ch)=='Y');
 
  outFile.close();
 
  std::cout << std::endl;
}



PreviousNext

Related