Однако пока мы не можем определить инициализацию переменной типа ТМопеу в привычном виде:
Во всех примерах предполагается, что текст программы включает в себя определение класса ТМопеу и все необходимые директивы #include.
TMotey и = 200.00;
Такая запись возможна только при наличии в классе конструктора. С конструкторами мы познакомимся в следующей главе, а пока перепишем метод инициализации Ini t () — реализуем возврат текущего объекта в качестве значения типа TMoney (листинг 1.18).
Листинг 1.18. Модифицированный метод lnit()
TMoney TMoney::Init(const long double &t=0.0) { Summa = round(t*100);
return *this; // возврат текущего объекта
}
Тогда мы сможем инициализировать переменные двумя способами. Прежний способ:
t.Init(432.78);
Новый способ:
TMoney t = z.Init(200);
Однако надо помнить, что в этом случае мы инициализируем сразу две переменные: объявляемую и ту, для которой вызван метод Ini t ().
Требует объяснения также строка, помеченная цифрой 1:
t.AddMoney(р).DisplayMoney(); // 1 - тоже сложение денег
Ничего сложного или необычного в ней нет, если мы вспомним, что в качестве аргументов функций мы можем задавать выражения. Вызов функции Display-МопеуО, оперирующей структурой типа TMoney (см. листинг 1.2), может быть таким:
DisplayMoney(AddMoney(t,р));
В этом случае сначала выполняется вызов функции AddMoneyO. Результат сложения имеет тип TMoney, но так как мы его никуда не помещаем, создается временный анонимный объект (см. п. 12.2 в [1]). Этот объект передается как аргумент функции DisplayMoney().
В строке, помеченной цифрой 1, записано точно то же самое, только в «объектно-ориентированном» виде. Сначала выполняется сложение t и р. Результат метода сложения имеет тип TMoney, но так как мы его никуда не помещаем, создается временный анонимный объект. Этот объект и используется как левый аргумент метода Di splayMoney (). В результате на экране появляется точно такая же сумма, как и в предыдущей строке. |