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

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

К примеру:

class complex {

double re, im;

public:

complex(double r, double i) { re=r; im=i; }

friend complex operator+(complex, complex);

friend complex operator*(complex, complex);

};

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

void f()

{

complex a = complex(1, 3.1);

complex b = complex(1.2, 2);

complex c = b;

a = b+c;

b = b+c*a;

c = a*b+complex(1,2);

}






 

Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Другие сайты | Наверх