384 ____________Часть III. Современное программирование на C++

поэтому ей требуется два аргумента (это отнюдь не означает, что аргументы должны передаваться через список; но об этом позже).

В строках 19—23 определена операция « и ее поведение с объектами INT.

Основная функция (строки 24—29) создает два объекта, инициализирует третий суммой этих двух и выводит все объекты на монитор. Обратите внимание, что синтаксис вывода совершенно одинаковый как для строковых констант, вроде "а= ", так и для членов класса INT.

Трассировка программы. Программу можно трассировать в IDE с помощью клавиши <F7>. Результат вывода в главной программе выглядит так:

а = 5 b =6 с = 11

Программа стартует со строки, содержащей функцию main. Оператор INT а (5), ь (б); заставляет программу произвести два независимых вызова конструктора. В строке INT с = а + b; происходит неявный вызов оператор-функции +, возвращающей объект типа INT. Этот объект затем используется для инициализации объекта с посредством вызова сгенерированного компилятором конструктора копий (см. главу 17).

Это надо знать. Функции operator+ и operator« могут быть сделаны членами класса, но, к сожалению, это вызовет ряд проблем. Во-первых: функция operator+ должна иметь доступ к элементам типа INT. Если операция будет членом класса, то такой доступ обеспечен, но проблемы не в этом.

Если оператор-функции являются членами класса, то им требуется только один аргумент. Так, объявление operator+ будет выглядеть следующим образом:

INT operator+ ( const INTS rhs) ;

а его определение примерно так:

INT INT::operator+ (const INT& rhs) (

INT t = data + rhs.data;

// эквивалентно: INT = this->data + rhs.data;

return t;

)

Причина сокращения числа аргументов состоит в том, что левым операндом является сам вызывающий объект. Возвратимся к нашей главной функции:

INT с = а + b; // где а и b — объекты типа IMT

t

Объект а — вызывающий (тот, на который ссылается указатель this), a b — передаваемый аргумент (формальный аргумент rhs). Проблемы появятся, как только мы слегка модифицируем класс. Рассмотрим:

INT с = а + b;