[C++] Przeciążanie operatorów na przykładzie klasy obsługującej wektory

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. [code=cpp] // 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 .

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.

[code=cpp] // 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;
}

[/code]