ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 4) онлайн
Пример применения структур
Рассмотрим теперь, каким образом можно применить способность структуры объединять данные различных типов. Возможно, вы знаете, что в английской системе мер основными единицами измерения длины служат фут и дюйм, при- чем один фут равен 12 дюймам. Расстояние, равное 15 футам и 8 дюймам, запи- сывается как 15'-8". Дефис в данной записи не означает знак «минус» , а служит для разделения значений футов и дюймов. Иллюстрация к английской системе мер приведена на рис. 4.5.

Рис. 4.5. Английская система мер
Предположим, вам необходимо создать инженерный проект с использовани- ем английской системы мер. Было бы удобно представлять длины в виде двух чисел, одно из которых равнялось бы количеству футов, а другое — количест- ву дюймов. В следующем примере, ENGLSTRC, такая идея реализована с помощью структуры. Мы покажем, как можно при помощи типа Distance складывать две длины.
// englstrc.cpp
// английская система мер, реализованная с помощью структуры
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////
struct Distance // длина в английской системе
{
int feet;
float inches;
};
//////////////////////////////////////////////////////////
int main()
{
Distance d1, d3; // определения двух переменных
Distance d2 = { 11, 6.25 }; // определение с инициализацией
// ввод полей переменной d1
cout << "\nВведите число футов: "; cin >> d1.feet;
cout << "Введите число дюймов: "; cin >> d1.inches;
// сложение длин d1 и d2 и присвоение результата d3
d3.inches = d1.inches + d2.inches; // сложение дюймов
d3.feet = 0; // с возможным заемом
if( d3.inches >= 12.0 ) // если сумма больше 12.0,
{ // то уменьшаем
d3.inches -= 12.0; // число дюймов на 12.0 и
d3.feet++; // увеличиваем число футов на 1
}
d3.feet += d1.feet + d2.feet; // сложение футов
// вывод всех длин на экран
cout << d1.feet <<"\'-" << d1.inches << "\" + ";
cout << d2.feet <<"\'-" << d2.inches << "\" = ";
cout << d3.feet <<"\'-" << d3.inches << "\"\n";
return 0;
}
Здесь структура Distance состоит из двух полей: feet и inches. Число дюймов не обязательно является целым, поэтому для его хранения мы используем тип float. Число футов, наоборот, всегда является целым, и поэтому его можно хра- нить в переменной типа int.
Мы определяем переменные типа Distance, d1, d2 и d3, причем переменную d2 мы инициализируем значением 11'-6.25", а переменные d1 и d3 пока оставлены без начального значения. Далее программа запрашивает у пользователя число футов и дюймов, которые используются для инициализации переменной d1 (при этом число дюймов должно быть меньше 12.0). Затем значения d1 и d2 склады- ваются, а результат присваивается переменной d3. Наконец, программа выводит две первоначальные длины и их сумму. Примером результата работы програм- мы может служить следующий:
Введите число футов: 10 Введите число дюймов: 6.75 10'-6.75" + 11'-6.25" = 22' -1"
Обратите внимание на то, что мы не можем сложить две длины следующим образом:
d3 = d1 + d2; // некорректное действие
Такое действие вызовет ошибку потому, что в C++ не определены дейст- вия, которые необходимо выполнить при сложении переменных типа Distance. Операция + применима для стандартных типов C++, но она не определена для типов данных, которые создаются пользователями (как мы увидим в гла- ве 8 «Перегрузка операций», одним из достоинств классов является возмож- ность определять сложение и другие операции над пользовательскими типами данных).
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Схожі підручники
- Бухгалтерський фінансовий облік (частина 1)
- конспект з курсу Філософія
- семінар №5 з курсу Регіональна Економіка
- РОЗРАХУНКОВІ РОБОТИ З КУРСУ «ЕКОЛОГІЯ»
- Міжнародні економічні зв’язки України та її інтеграція в європейські та інші світові структури
- РЕГІОНАЛЬНА ЕКОНОМІКА. Тексти лекцій онлайн (частина 1)
