
[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]
