Есть ответ 👍

Поясните код С++
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;

}

288
488
Посмотреть ответы 2

Ответы на вопрос:


Данный код представляет собой описание класса 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

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

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

friend std::ostream& operator<<(std::ostream& os, const Time& time);

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) {

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

std::cout << t;

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

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

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

std::cin >> t;

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


22 июня 1941 года. Начало Великой Отечественной войны

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS