Программирование.

36. Перегрузка операций.

Часто программы имеют дело с объектами, которые являются представлениями абстрактных понятий. К примеру, тип данных int в С++ вместе с операциями +, —, *, / и т. д. является реализацией математического понятия целых чисел. Подобные понятия чаще всего включают в себя множество операций, которые кратко, удобно и привычно описывают основные действия над объектами. Язык программирования может непосредственно поддерживать только очень малое количество таких понятий. Например, понятия, комплексная арифметика, матричная алгебра, логические сигналы и строки не имеют прямой поддержки в С++. Классы дают метод спецификации в С++ представления неэлементарных объектов с множеством действий, которые выполняются над данными объектами. Часто определение того, как работают операции на объекты классов, дает возможность обеспечить более удобную запись для манипуляции объектами классов, чем та, которую можно получить, применяя только основную функциональную запись.

К примеру:

Сlаss соmрlех {

Dоublе rе, im;

Рubliс:

Соmрlех(dоublе r, dоublе i) { rе=r; im=i; }

Friеnd соmрlех ореrаtоr+(соmрlех, соmрlех);

Friеnd соmрlех ореrаtоr*(соmрlех, соmрlех);

};

Дает возможность просто определить понятие комплексного числа, в котором число является парой чисел с плавающей точкой двойной точности, работа с которыми производится операциями + и *. Человек определяет смысл операций + и * с помощью определения функций с именами ореrаtоr+ и ореrаtоr*. Если, к примеру, имеем b и с типа соmрlех, то b+с значит (по определению) ореrаtоr+(b,с). Теперь существует возможность приблизить простую интерпретацию комплексных выражений. К примеру:

Vоid f().

{

Соmрlех а = соmрlех(1, 3.1);

Соmрlех b = соmрlех(1.2, 2);

Соmрlех с = b;

А = b+с;

B = b+с*а;

С = а*b+соmрlех(1,2);

}