В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
Орррроо
Орррроо
26.08.2021 20:08 •  Информатика

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

}

Показать ответ
Ответ:
ВулканчикD
ВулканчикD
13.10.2020 02:56

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

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

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота