Нам нужна такая реализация, в которой операции были бы более тесно связаны с типом
Все переменные-деньги теперь будут явно обозначены соответствующим словом, однако контроль их правильного использования по-прежнему должен осуществлять программист.
Нам нужна такая реализация, в которой операции были бы более тесно связаны с типом. При этом желательно, чтобы можно было выполнять только допустимые операции, а «неправильные» — невозможно. Поступим по-другому: сконструируем денежный тип из стандартных встроенных типов и напишем соответствующие функции обработки. В процедурном программировании сконструировать новый тип из стандартных можно только одним способом — с помощью структуры. Так как стандартные целые типы не обеспечивают (пока) требуемого диапазона денежных сумм, используем для представления денег тип long double1.
1 В системах Visual С++ тип long double реализован просто как double.
Денежную сумму можно задать обычным дробным числом с двумя знаками после десятичной точки, обозначающим копейки. Например, 12.67 обозначает сумму 12 рублей 67 копеек. Оперировать, однако, будем суммами в копейках, округляя результат опять до копеек — для этого достаточно денежную сумму умножить на 100. Таким образом, хотя деньги представляются дробным числом типа long double, оперировать мы будем целой частью этого числа. Кроме того, отрицательные числа будут представлять долг. Наша структура с денежным полем показана в листинге 1.1.
Листинг 1.1. Структура для представления денежных сумм struct TMoney
{ long double Summa; // денежная сумма };
Как сейчас принято говорить, мы создали «оболочку» (wrapper) вокруг стандартного встроенного типа — «обернули» стандартный встроенный тип long double в структуру.
Опубликовал Kest
August 13 2013 20:44:49 ·
0 Комментариев ·
3800 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.