Блог для маленьких школьников и их родителей
ШколаЛа

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

Автор:
Предмет: Информатика
Уровень: студенческий

Поясните пожалуйста код С++

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;

}

Ответов к вопросу: 1
  • Anzhiii
    12.07.2024 | 16:15

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

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

Ответить на вопрос:
:p :-p 8) 8-) :lol: =( :( :-( :8 ;) ;-) :(( :o:
Нажимая на кнопку я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.