Przeciążanie operatorów na przykładzie klasy TVector. Kod jest uzupełniony o komentarze które przydadzą się w trakcie jego analizy. Kompilowane pod Visual Studio 2010.



// przeciazanie operatorow.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>

using namespace std;

class TVector
{
private:
int X;
int Y;
public:
// konstruktor domyślny
TVector()
{
X = 0;
Y = 0;
}

TVector(int x, int y)
{
X = x;
Y = y;
}

void showVector()
{
cout<<"("<<X<<","<<Y<<")n";
}

//gettery
int getX()
{
return X;
}

int getY()
{
return Y;
}

//settery
void setX(int x)
{
X = x;
}

void setY(int y)
{
Y = y;
}

// definicja przeciążenia operatora + na rzecz klasy TVector
TVector operator+(TVector obj)
{
TVector temp;
// do zmiennych X i Y możemy odwołać się przez . ponieważ przeciążenie operatora jest zdefiniowane wewnątrz klasy
//X,Y to zmienne obiektu na ktorym wywolujemy operator, przekazana przez wskaznik this
temp.X = X + obj.X;
temp.Y = Y + obj.Y;

return temp;
}

// deklaracja iloczynu sklarnego, ktorego definicje umiescimy na zewnatrz klasy
int operator*(TVector);

};

// przeciążenie operatora - zdefiniowane na zewnątrz klasy. Jest globalnie zdefiniowane dlatego przyjmuje dwa argumenty
TVector operator-(TVector obj1, TVector obj2)
{
TVector temp;
// pobieranie X i Y wykonujemy przy pomocy metod get poniewaz są to zmienne chronione
temp.setX(obj1.getX() - obj2.getX());
temp.setY(obj1.getY() - obj2.getY());
return temp;
}

// Iloczyn skalarny, zadeklarowany w klasie TVector, a zdefiniowany na zewnątrz stąd prefix TVector::
// Domyślnie przyjmuje jako argument obiekt klasy na rzecz którego używamy operatora
int TVector::operator*(TVector obj)
{
// X i Y to prywatne zmienne z klasy TVector przekazane przez wskaznik this
int iloczyn = X*obj.X + Y*obj.Y;
return iloczyn;
}

//=========================================================================

int _tmain(int argc, _TCHAR* argv[])
{
cout<<"Hellon";

TVector obj1(1,3);
TVector obj2(-2,9);
TVector obj;

cout<<"Wektor 1: ("<<obj1.getX()<<","<<obj1.getY()<<")n";
cout<<"Wektor 2: ("<<obj2.getX()<<","<<obj2.getY()<<")n";

cout<<"Suma wektorow: ";
obj = obj1+obj2;
obj.showVector(); //(-1,12)

cout<<"Roznica wektorow: ";
obj = obj1-obj2;
obj.showVector(); //(3,-6)

int iloczyn = obj1*obj2;
cout<<"Iloczyn skalarny wektorow: "<<iloczyn<<endl;

system("pause");
return 0;
}