Читайте также:
|
|
Оператор вызова функции, вызываемый с помощью круглых скобок, трактуется как бинарный. Синтаксис вызова функции следующий:
<выражение> (<список_выражений>)
Здесь
<выражение> первый операнд;
<список_выражений> второй операнд (необязательный). Оператор вызова функции должен быть объявлен как нестатическая функция-член класса. К перегрузке этого оператора прибегают в тех случаях, когда нужна операция, требующая многих параметров.
Когда оператор вызова функции перегружен, он модифицирует интерпретацию применения круглых скобок к объектам того класса, в котором он объявлен, а не то, как функции вызываются.
Рассмотрим пример, в котором перегрузка оператора вызова функции используется для вычисления вектора, повёрнутого относительно заданного вектора на заданный угол:
Файл DotVec.h
class Vec; // неполное объявление класса вектора
class Dot // класс точки
{
• • •
public:
Dot operator + (Vec & V); // перегрузка оператора сложения точки и вектора
};
class Vec // класс вектора
{
Объектно-ориентированное программирование |
• • •
public:
Лекция 8 Перегрузка операторов *|3
Vec & operator () (Vec & V, int f); // перегрузка оператора вызова функции };
Файл DotVeccpp include "DotVech"
• • •
Vec & Vec:: operator () (Vec & V, int f ) // поворачивает вектор V на
{ // angle градусов по часовой стрелке
const double pi = 4 * atan (1); // объявляет константу пи
double F = f * pi / 180.0; // пересчитывает градусы в радианы
х = V.x * cos (F) - V.y * sin (F); у = V.x * sin (F) + V.y * cos (F);
return *this; // возвращает текущий объект
}
Файл Main.cpp include "DotVech" void main () {
Dot A ('A'), В ('В'), С ('С'); // объявляет точки
Vec AB ("АВ",+А,+В), АС ("АС"); // вводит координаты точек А и В с клавиатуры,
// объявляет вектора АВ и АС,
// конструирует вектор АВ по координатам его концов.
~ (С = А + ~АС (АВ, 60)); // поворачивает вектор АВ на 60° по часовой стрелке,
// инициализирует вектор АС повёрнутым вектором, // выводит проекции вектора АС на экран, // складывает точку А с вектором АС, // результат сложения передаёт в точку С, // выводит координаты точки С на экран. }
При выполнении программа выводит на экран: Введите координаты точки В х = 3
У = 1 Введите координаты точки А х = 1
У = 1
Проекции вектора АС х = 1 у = 1.73205
Координаты точки С х = 2 у = 2.73205
В приведённом примере решена следующая задача. Заданы две вершины равностороннего треугольника. Нужно вычислить третью вершину. Приведено одно из двух возможных математических решений.
Не следует путать выражения, использующие круглые скобки: Vec АС ("АС") с АС (АВ, 60). Первое вызывает конструктор с параметрами, второе - перегруженный оператор вызова функции.
Дата добавления: 2015-11-26; просмотров: 51 | Нарушение авторских прав