Таким образом, поля данных поместим в закрытую (или, как часто еще говорят, в приватную) часть класса, а методы — в открытую. Однако у нас осталось еще несколько вопросов: как определить метод, как вызывать его, какие параметры и возвращаемые значения разрешается прописывать в заголовке. Очевидно, что и определение метода, и его вызов должны отличаться от определения и вызова обычных функций.
Начнем с функции инициализации. Определение метода инициализации внутри класса выглядит так, как показано в листинге 1.8.
Листинг 1.8. Класс ТМопеу с методом lnit()
class ТМопеу
{ // закрытые поля
long double Summa; // денежная сумма
public: // открытые методы
void Init(const long double &t=0.0)
{ // переводим в копейки и отсекаем оставшийся "хвостик"
long double г = floor(((t<0)? -t: t)*100);
Summa = (t<0)? -г: г; //учитываем знак
}
}:
Как видим, параметры метода так же, как и параметры обычной функции, можно задавать по умолчанию. Сначала мы получаем сумму в копейках — для этого положительное значение параметра умножается на 100 и с помощью функции floor () «отрезается хвост». Затем мы помещаем это значение в сумму, но уже с учетом знака исходной суммы.
Внутри метода имена полей указываются безо всяких дополнительных префиксов. Кроме того, заголовок метода отличается от заголовка аналогичной функции: метод не возвращает значение. Это связано с тем, что вызов метода отличается от вызова функции: вызов метода осуществляется точно так же, как доступ к полям структуры — с помощью операции-селектора (точка). Пусть, например, у нас объявлен объект
TMoney t;
Тогда вызов метода I n i t () выглядит так: t.Init(123.67);
Такая запись совершенно недвусмысленно говорит, что Init() — это метод, вызываемый для объекта t. И сразу понятно, что возвращаемое значение методу не нужно — инициализируется тот объект, для которого этот метод Bbteeafr |