Среда, 08.01.2025, 20:57
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » c++

Практический пример использования перегрузки оператора вызова функции

Интерфейс класса Point:

#ifndef __BRACKETS_OVERLOAD__
#define __BRACKETS_OVERLOAD__

#include <iostream.h>

class Point
{
 int X, Y;
public:
 // Конструктор
 Point(int x = 0, int y = 0);
 // Смещение точки
 void Offset(int x, int y);
 
 // Проверка на совпадение точек
 bool operator == (const Point& pt);
 // Проверка на несовпадение точек
 bool operator != (const Point& pt);

 // Сумма двух точек
 Point operator + (const Point& pt);
 Point& operator += (const Point& pt);

 // Задание новых координат
 Point operator () (int x, int y);

 // Вывод точки
 friend ostream& operator << (ostream& os, const Point& pt);
};

#endif

Реализация класса Point:

#include "bracketsoverload.h"

Point::Point(int x /* = 0 */, int y /* = 0 */)
{
 X = x;
 Y = y;
}

void Point::Offset(int x, int y)
{
 X += x;
 Y += y;
}

ostream& operator << (ostream& os, const Point& pt)
{
 os << "(" << pt.X << "," << pt.Y << ")";
 return os;
}

bool Point::operator == (const Point& pt)
{
 // Проверка на совпадение
 return (X == pt.X && Y == pt.Y);
}

bool Point::operator != (const Point& pt)
{
 // Проверка на несовпадение с помощью предыдущей функции
 return !(*this == pt);
}

Point Point::operator + (const Point& pt)
{
 // Происходит вызов конструктора, создающего временный объект
 return Point(X + pt.X, Y + pt.Y);
}

Point& Point::operator += (const Point& pt)
{
 *this = *this + pt;
 return *this;
}

Point Point::operator () (int x, int y)
{
 // Задание новых координат
 X = x;
 Y = y;
 // Возврат новой позиции точки
 return *this;
}

Использование класса Point:

#include "bracketsoverload.h"

void main()
{
 Point A, B(10, 10);

 cout << "A" << A << endl << "B" << B << endl;

 A.Offset(15, 30);

 Point C = A + B;
 cout << "C" << C << endl;

 Point D = C(3, 3);

 if(C == D)
 cout << "C" << C << " = " << "D" << D << endl;
}

Проект можно найти в папке Point

Категория: c++ | Добавил: slava (30.05.2011)
Просмотров: 1856 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]