Поясните пожалуйста код С++ class Time { public: Time()  : m_hours(0), m_minutes(0)...

0 голосов
19 просмотров

Поясните пожалуйста код С++ class Time { public: Time()  : m_hours(0), m_minutes(0) {  //TODO } Time(short hours, short minutes)  : m_hours(hours), m_minutes(minutes) {  //TODO } Time operator-(const Time& time) {  Time tempTime;  tempTime.m_minutes = this->m_minutes - time.m_minutes;  if (tempTime.m_minutes < 0) {   tempTime.m_minutes += 60;  }  tempTime.m_hours = this->m_hours - time.m_hours;  if (tempTime.m_hours < 0) {   tempTime.m_hours += 23;  }  return tempTime; } friend std::ostream& operator<<(std::ostream& os, const Time& time); friend std::istream& operator>>(std::istream& is, Time& time); short m_hours; short m_minutes; }; std::ostream& operator<<(std::ostream& os, const Time& time) { if (time.m_hours < 10) {  os<< "0"; } os<< time.m_hours << ":"; if (time.m_minutes < 10) {  os<< "0"; } os << time.m_minutes; return os; } std::istream& operator>>(std::istream& is, Time& time) { char delim{ ':' }; is >> time.m_hours >> delim >> time.m_minutes; if (time.m_hours > 23) {  time.m_hours %= 24; } if (time.m_minutes > 59) {  time.m_minutes %= 60; }


Информатика (24 баллов) | 19 просмотров
Дан 1 ответ
0 голосов

Данный код представляет собой описание класса Time, содержащего два конструктора, два поля, и перегруженные операторы ввода, вывода и вычитания.

Вот эта конструкция:

Time()

       : m_hours(0), m_minutes(0) {

}

Это конструктор класса без параметров, инициализирует переменные  

m_hours и m_minutes, присваивая им ноль.

---------------------------------------------------------------------------------------

   Time(short hours, short minutes)

       : m_hours(hours), m_minutes(minutes) {

}

Конструктор класса с параметрами

---------------------------------------------------------------------------------------

Time operator-(const Time& time) {

Определение оператора вычитания для класса . Необходимо для того, чтобы можно было вычитать одно время из другого. Например, так:

Time t(5, 30), t2(1, 20);  // Использование конструктора с параметрами

t=t - t2;  // Использование оператора вычитания

std::cout << t; // Выведет 4:10</em>

// Чтобы была возможность использовать такое выражение, мы переопределяем оператор вывода, о чем чуть ниже.

---------------------------------------------------------------------------------------

friend std::ostream& operator

friend std::istream& operator>>(std::istream& is, Time& time);

Объявление двух дружественных классу Time перегруженных операторов (ввода и вывода). Совершенно бесполезные строки, учитывая, что в коде, который перегружает эти операторы не используются закрытые члены класса Time, а используются m_minutes и m_hours, объявленные в классе Time как public.

Использование этих двух строк было бы уместно, если бы m_minutes и m_hours были бы private.

---------------------------------------------------------------------------------------

std::ostream& operator<<(std::ostream& os, const Time& time) {</em>

Перегрузка оператора вывода , чтобы мы могли делать так:  

std::cout << t;</em>

---------------------------------------------------------------------------------------

std::istream& operator>>(std::istream& is, Time& time) {

Перегрузка оператора ввода , чтобы мы могли делать так:

std::cin >> t;

Дополнительные объяснения, если непонятно что-то конкретное, спрашивайте в комментариях.

(2.5k баллов)