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

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

}

Показать ответ
Ответ:
Behruz2008
Behruz2008
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-бота