initial commit
This commit is contained in:
		
						commit
						2369f801af
					
				
					 76 changed files with 4273 additions and 0 deletions
				
			
		|  | @ -0,0 +1,48 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     Предположим, что мы захотели создать структуру, который будет хранить время (для простоты, только минуты и секунды) | ||||
| 
 | ||||
|     Нам может понадобиться функция, которая будет добавлять ко времени, некоторое количество секунд | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| Time add(Time t, int x) | ||||
| { | ||||
|     Time result = t; | ||||
|     result.seconds += x; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {20, 10}; | ||||
|     Time b = add(a, 90); | ||||
| 
 | ||||
|     cout << b.minutes << " " << b.seconds << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
| 
 | ||||
|     Задача: | ||||
|          | ||||
|         1)  Напишите функцию, которая будет складывать не время и число, а два времени | ||||
| 
 | ||||
|             Time add(Time ta, Time tb) | ||||
| 
 | ||||
| */ | ||||
|  | @ -0,0 +1,44 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| Time add(Time t, int x) | ||||
| { | ||||
|     Time result = t; | ||||
|     result.seconds += x; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| Time add(Time ta, Time tb) | ||||
| { | ||||
|     Time result = ta; | ||||
|     result.seconds += 60 * tb.minutes + tb.seconds; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {20, 10}; | ||||
|     Time b = add(a, 90); | ||||
|     Time c = add(a, b); | ||||
| 
 | ||||
|     cout << b.minutes << " " << b.seconds << endl; | ||||
|     cout << c.minutes << " " << c.seconds << endl; | ||||
| } | ||||
| 
 | ||||
|  | @ -0,0 +1,63 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     Использовать функции может быть не так удобно как операторы. | ||||
|     Возможно было бы удобней для добавления времени использовать не функцию add, а оператор + | ||||
| 
 | ||||
|     Можно перегрузить оператор функцией, для этого нужно назвать функцию так: operator@ | ||||
|     где за место @ нужно подставить оператор, который вы хотите перегрузить | ||||
| 
 | ||||
|     Например, функция Time operator+(Time t, int x) перегружает оператор + для типов Time и int соответственно (обязательно в таком порядке) | ||||
|     Теперь, когда компилятор встретит в коде сложение с таким операндами он вызовет эту функцию | ||||
| 
 | ||||
|     В этом примере  a + 90  при компиляции преобразуется в вызов функции  operator+(a, 90) | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| Time operator+(Time t, int x) | ||||
| { | ||||
|     Time result = t; | ||||
|     result.seconds += x; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {20, 10}; | ||||
|     Time b = a + 90; | ||||
| 
 | ||||
|     cout << b.minutes << " " << b.seconds << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
| 
 | ||||
|     Задача: | ||||
| 
 | ||||
|         1)  Что если операторы сложения поменяются местами | ||||
|                 Time b = 90 + a; | ||||
|             Сработает ли в этом случае наша функция operator+ и, если нет, что нужно добавить, чтобы такое сложение сработало? | ||||
|          | ||||
| 
 | ||||
|         2)  Напишите перегруженный оператор, который будет складывать не время и число, а два времени | ||||
| 
 | ||||
|                 Time operator+(Time ta, Time tb) | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
| 
 | ||||
| */ | ||||
|  | @ -0,0 +1,50 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| Time operator+(Time t, int x) | ||||
| { | ||||
|     Time result = t; | ||||
|     result.seconds += x; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Time operator+(int x, Time t) | ||||
| { | ||||
|     return t + x; | ||||
| } | ||||
| 
 | ||||
| Time operator+(Time ta, Time tb) | ||||
| { | ||||
|     Time result = ta; | ||||
|     result.seconds += 60 * tb.minutes + tb.seconds; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {20, 10}; | ||||
|     Time b = a + 90; | ||||
|     Time c = 90 + a; | ||||
|     Time d = a + b; | ||||
| 
 | ||||
|     cout << b.minutes << " " << b.seconds << endl; | ||||
|     cout << c.minutes << " " << c.seconds << endl; | ||||
|     cout << d.minutes << " " << d.seconds << endl; | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,71 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     Помимо перегрузки операторов, принимающих 2 аргумента (бинарных) | ||||
|     можно перегружать и унарные операторы - принимающие один аргумент | ||||
| 
 | ||||
|     При этом, так как operator+ это функция, то работает перегрузка функций | ||||
| 
 | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| Time operator+(Time ta, Time tb) | ||||
| { | ||||
|     cout << "binary operator +" << endl; | ||||
| 
 | ||||
|     Time result = ta; | ||||
|     result.seconds += 60 * tb.minutes + tb.seconds; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Time operator+(Time t) | ||||
| { | ||||
|     cout << "unary operator +" << endl; | ||||
| 
 | ||||
|     return t; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {20, 10}; | ||||
|     Time b = {40, 30}; | ||||
| 
 | ||||
|     Time c = a + b; | ||||
|     Time d = +a; | ||||
| 
 | ||||
|     cout << c.minutes << " " << c.seconds << endl; | ||||
|     cout << d.minutes << " " << d.seconds << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
| 
 | ||||
|     Задача: | ||||
| 
 | ||||
|         1)  Что если операторы сложения поменяются местами | ||||
|                 Time b = 90 + a; | ||||
|             Сработает ли в этом случае наша функция operator+ и, если нет, что нужно добавить, чтобы такое сложение сработало? | ||||
|          | ||||
| 
 | ||||
|         2)  Напишите перегруженный оператор, который будет складывать не время и число, а два времени | ||||
| 
 | ||||
|                 Time operator+(Time ta, Time tb) | ||||
| 
 | ||||
| 
 | ||||
|          | ||||
| 
 | ||||
| */ | ||||
|  | @ -0,0 +1,38 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| /*
 | ||||
|     В прошлом семестре, для хранения результатов логических операций, мы использовали целочисленные типы (например int). | ||||
|      | ||||
|     В языке C++ есть встроенный тип bool, который может принимать 2 значения (true и false). | ||||
|     Для хранения значения логических переменных желательно использовать этот тип | ||||
| 
 | ||||
|      | ||||
|     При печати на экран с помощью std::cout переменных типа bool печатается либо 0 либо 1 | ||||
|     Чтобы на экран печаталось false или true нужно в std::cout передать специальный объект std::boolalpha  | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| bool isEven(int a) | ||||
| { | ||||
|     return a % 2 == 0; | ||||
| } | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     bool a = isEven(10); | ||||
|     bool b = isEven(15); | ||||
|     bool c = a || b; | ||||
| 
 | ||||
| 
 | ||||
|     if (c) | ||||
|         cout << "Yes" << endl; | ||||
|     else | ||||
|         cout << "No" << endl; | ||||
| 
 | ||||
|     cout << c << endl; | ||||
|     cout << std::boolalpha << c << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,68 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     Помимо арифметических операторов можно перегружать и операторы сравнения (и многие другие операторы) | ||||
|     Желательно, чтобы операторы сравнения возвращали bool | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| Time operator+(Time ta, Time tb) | ||||
| { | ||||
|     Time result = ta; | ||||
|     result.seconds += 60 * tb.minutes + tb.seconds; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool operator>(Time ta, Time tb) | ||||
| { | ||||
|     bool result = false; | ||||
| 
 | ||||
|     if (ta.minutes > tb.minutes) | ||||
|         result = true; | ||||
|     else if (ta.minutes == tb.minutes && ta.seconds > tb.seconds) | ||||
|         result = true; | ||||
|      | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {10, 20}; | ||||
|     Time b = {10, 40}; | ||||
|     Time c = {0,  20}; | ||||
| 
 | ||||
|     cout << std::boolalpha; | ||||
|     cout << (a > b) << endl; | ||||
|     cout << (b > a) << endl; | ||||
|     cout << (a + c > b) << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
| 
 | ||||
|     Задача: | ||||
| 
 | ||||
|         1)  Заметьте, что при выводе на экран сравнение было взято в скобки | ||||
|                 cout << (a > b) << endl; | ||||
| 
 | ||||
|             Что будет, если эти скобки не писать и почему | ||||
|                 cout << a > b << endl; | ||||
|          | ||||
|          | ||||
|         2)  Напишите перегруженные операторы <  >=  <=  ==  !=  для сравнения объектов структур типа Time друг с другом | ||||
| 
 | ||||
| */ | ||||
|  | @ -0,0 +1,110 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     Помимо арифметических операторов можно перегружать и операторы сравнения (и многие другие операторы) | ||||
|     Желательно, чтобы операторы сравнения возвращали bool | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| Time operator+(Time ta, Time tb) | ||||
| { | ||||
|     Time result = ta; | ||||
|     result.seconds += 60 * tb.minutes + tb.seconds; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool operator>(Time ta, Time tb) | ||||
| { | ||||
|     bool result = false; | ||||
| 
 | ||||
|     if (ta.minutes > tb.minutes) | ||||
|         result = true; | ||||
|     else if (ta.minutes == tb.minutes && ta.seconds > tb.seconds) | ||||
|         result = true; | ||||
|      | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool operator==(Time ta, Time tb) | ||||
| { | ||||
|     bool result = false; | ||||
|     if (ta.minutes == tb.minutes && ta.seconds == tb.seconds) | ||||
|         result = true; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| bool operator!=(Time ta, Time tb) | ||||
| { | ||||
|     return !(ta == tb); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool operator>=(Time ta, Time tb) | ||||
| { | ||||
|     return ta > tb || ta == tb; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool operator<(Time ta, Time tb) | ||||
| { | ||||
|     return !(ta >= tb); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool operator<=(Time ta, Time tb) | ||||
| { | ||||
|     return !(ta > tb); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {10, 20}; | ||||
|     Time b = {10, 40}; | ||||
|     Time c = {0,  20}; | ||||
| 
 | ||||
|     cout << std::boolalpha; | ||||
|     cout << (a == b) << endl; | ||||
|     cout << (a != b) << endl; | ||||
| 
 | ||||
|     cout << (a < b) << endl; | ||||
|     cout << (a <= b) << endl; | ||||
|     cout << (a > b) << endl; | ||||
|     cout << (a >= b) << endl; | ||||
|     cout << (a + c >= b) << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
| 
 | ||||
|     Задача: | ||||
| 
 | ||||
|         1)  Заметьте, что при выводе на экран сравнение было взято в скобки | ||||
|                 cout << (a > b) << endl; | ||||
| 
 | ||||
|             Что будет, если эти скобки не писать и почему | ||||
|                 cout << a > b << endl; | ||||
|              | ||||
|             Ошибка происходит из-за того, что приоритет операции << выше, чем у операций сравнения | ||||
|             В результате сначала проводится | ||||
|                 cout << a | ||||
|             затем получившийся объект сравнивается с b. Это и приводит к ошибке. | ||||
| */ | ||||
|  | @ -0,0 +1,49 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| /*
 | ||||
|     Перегрузка оператора << для вывода на экран | ||||
| 
 | ||||
|     Напомним, что объект под названием cout имеет тип ostream (сокращение от output stream - выходной поток) | ||||
|     и хранится в библиотеке iostream в пространстве имён std | ||||
| 
 | ||||
|     То есть где-то внутри библиотеки iostream объявлена глобальная переменная по имени cout типа ostream | ||||
|         ostream cout; | ||||
| 
 | ||||
|      | ||||
|     Мы можем перегрузить оператор << с первым аргументом типа std::ostream, а вторым аргументом - нашим типом, | ||||
|     чтобы удобно выводить на экран объекты нашего типа. | ||||
| 
 | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| void operator<<(std::ostream& out, Time t) | ||||
| { | ||||
|     out << t.minutes << ":" << t.seconds; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {10, 20}; | ||||
|     cout << a; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     Задача: | ||||
| 
 | ||||
|         cout << a;  работает, но | ||||
|         cout << a << endl; выдаёт ошибку в данной программе. | ||||
| 
 | ||||
|         Из-за чего это происходит и как исправить эту ошибку? | ||||
| 
 | ||||
| */ | ||||
|  | @ -0,0 +1,63 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| Time operator+(Time ta, Time tb) | ||||
| { | ||||
|     Time result = ta; | ||||
|     result.seconds += 60 * tb.minutes + tb.seconds; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| std::ostream& operator<<(std::ostream& out, Time t) | ||||
| { | ||||
|     out << t.minutes << ":" << t.seconds; | ||||
|     return out; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {10, 20}; | ||||
|     Time b = {15, 50}; | ||||
| 
 | ||||
|     cout << a << endl << b << endl; | ||||
|     cout << a + b << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     Задача: | ||||
| 
 | ||||
|         cout << a;  работает, но | ||||
|         cout << a << endl; выдаёт ошибку в данной программе. | ||||
| 
 | ||||
|         Из-за чего это происходит и как исправить эту ошибку? | ||||
| 
 | ||||
| 
 | ||||
|     Решение: | ||||
| 
 | ||||
|         Ошибка происходила из-за того, что оператор << ничего не возвращал. | ||||
|          | ||||
|         В строке   cout << a << endl; | ||||
|         результат  cout << a  был void и к нему нельзя применить оператор << ещё раз. | ||||
| 
 | ||||
| 
 | ||||
|         Результат  cout << a  должен быть тоже быть равен cout | ||||
|         Но, поскольку глобальный объект cout копировать мы не можем, у нас остаётся единственный выход: | ||||
|         принимать и возвращать объект cout по ссылке. | ||||
| 
 | ||||
| */   | ||||
|  | @ -0,0 +1,52 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| struct Complex  | ||||
| { | ||||
|     float re, im; | ||||
| }; | ||||
| 
 | ||||
| Complex operator+(Complex first, Complex second)  | ||||
| { | ||||
|     Complex result = {first.re + second.re, first.im + second.im}; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Complex z1 = {3, 7}; | ||||
|     Complex z2 = {2, -4}; | ||||
| 
 | ||||
|     Complex z = z1 + z2;  | ||||
|     cout << z.re << " + " << z.im << "i" << endl; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|     Задачи: | ||||
| 
 | ||||
|         1) Перегрузите следующие операторы: | ||||
|             - Вычитание | ||||
|             - Умножение | ||||
|             - Деление | ||||
|             - Унарный минус | ||||
|             - Унарный плюс | ||||
|             - Сравнение == | ||||
|             - Сопряжение - это операция, которая меняет знак мнимой части комплексного числа | ||||
|               Для сопряжения используйте оператор унарная звёздочка * | ||||
| 
 | ||||
|         2) Перегрузите оператор вывода << | ||||
| 
 | ||||
|         3) Напишите функцию exp(z) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     /*
 | ||||
|         cout << z1 - z2 << endl; | ||||
|         cout << z1 * z2 << endl; | ||||
|         cout << z1 / z2 << endl; | ||||
|         cout << -z1 << endl; | ||||
|         cout << *z1 << endl;    // (Комплексно-сопряжённое)
 | ||||
| 
 | ||||
|         z = exp(z1 + z2)/(z1 * z2); | ||||
|         cout << z << endl; | ||||
|     */ | ||||
|  | @ -0,0 +1,52 @@ | |||
| #include <iostream> | ||||
| #include <iomanip> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     В библиотеки iomanip содержатся специальные функции, для работы с потоками ostream | ||||
| 
 | ||||
|         setw  -  установить минимальный размер в символах для печати следующего объекта | ||||
|         setfill  -  если размер печати меньше минимального, то замостить оставшееся соответствующим символом | ||||
| 
 | ||||
|         setprecision  -  установить точность (для вещественных чисел) | ||||
| */   | ||||
| 
 | ||||
| 
 | ||||
| struct Time  | ||||
| { | ||||
|     int minutes; | ||||
|     int seconds; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| Time operator+(Time ta, Time tb) | ||||
| { | ||||
|     Time result = ta; | ||||
|     result.seconds += 60 * tb.minutes + tb.seconds; | ||||
|      | ||||
|     result.minutes += (result.seconds / 60); | ||||
|     result.seconds %= 60; | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| std::ostream& operator<<(std::ostream& out, Time t) | ||||
| { | ||||
|     out << std::setfill('0') << std::setw(2) << t.minutes << ":" <<  | ||||
|            std::setfill('0') << std::setw(2) << t.seconds; | ||||
|     return out; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main()  | ||||
| { | ||||
|     Time a = {1, 5}; | ||||
|     Time b = {4, 20}; | ||||
| 
 | ||||
|     cout << a << endl << b << endl; | ||||
|     cout << a + b << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
		Reference in a new issue