Теперь рассмотрим метод вывода на экран. Можно было бы его просто переписать как метод, однако мы поступим по-другому. Чтобы не иметь в дальнейшем проблем, связанных с добавлением новой валюты (например, долларов или евро), разделим нашу функцию вывода на экран на две:
? вспомогательная функция to St ring () формирует строку-число;
? основная функция вызывает первую и добавляет к строке-числу название денег, в нашем случае — рубли.
Функция преобразования числа в строку — хороший кандидат для Закрытой части класса, а вторая функция — это наш метод вывода на экран, который, естественно, должен быть открыт. Таким образом, функцию toStri ng() невозможно вызвать вне определения класса, но любой метод может ее беспрепятственно использовать для своих нужд.
Так как обе функции имеют доступ к полю суммы непосредственно, то параметры им не нужны. Таким образом, заголовок внешнего определения функции toStringO выглядит так:
string ТМопеу::toStringO
А заголовок метода вывода на экран должен быть таким: void ТМопеу::DisplayMoney()
Тогда вызов для объявленного ранее объекта t выглядит так: t.Di splayMoney();
Реализация обеих функций представлена в листинге 1.10.
Листинг 1.10. Функции вывода на экран
string ТМопеу:: toStringO { string s = "";
string Digits = "0123456789";
uint digit;
long double t = fabs(Summa);
bool negative = (Summa < 0 );
uint kop = fmod(t, 100);
t = floor(t/=100);
if (t > 0)
{ while (t>=l)
{ digit = fmod(t, 10); t/=10;
s=Digits[digit]+s;
}
}
else s+="0"; s+=".";
,+s;
s+=Digits[kop/10]; if (negative) s = ' return s;
// строка-результат
// цифры для результата
// выделенная цифра
// делаем положительным
// запоминаем знак
// выделили копейки
// отсекаем копейки
// если есть рубли
// формируем рубли
// получаем цифру
// отсекаем цифру
// прицепляем символ-цифру
void TMoney::DisplayMoney() { string s = toStringO ;
s+=" руб.":
cout << s << endl;
}
// получили строку-число
// добавили обозначение рублей
// вывели на экран
Алгоритм фактически не изменился, поэтому детально его описывать нет необходимости. |