Witam. Uczę się przeciążania operatorów w C++, aby móc m.in. dodawać ze sobą dwa obiekty tej samej klasy. Z pomocą internetowych tutoriali napisałem taki program dla ćwiczeń:
#include <iostream>
using namespace std;
class Vector
{
private:
int a;
int b;
public:
Vector() {a=0; b=0;}
Vector(int a, int b){this->a=a; this->b=b;}
Vector operator+(const Vector & x)
{
return Vector(this->a + x.a, this->b +x.b);
}
void pokaz()
{
cout<<"Zmienna a = "<<a<<endl;
cout<<"Zmienna b = "<<b<<endl<<endl;
}
} ;
int main()
{
Vector v1(2,4);
v1.pokaz();
Vector v2(8,6);
v2.pokaz();
Vector v3;
v3.pokaz(); //pokaze a=0 i b=0
v3 = v1 + v2;
v3.pokaz();//teraz pokaze a=10 i b=10, czyli obiekty v1 i v2 zostaly dodane i wynik przypisany do v3
return 0;
}
Program działa, ale:
- Czy napisałem to dobrze?
- Jeżeli mam być szczery, to chyba nie do końca wiem co tam się dzieje. xD
Gdyby opisać to przeciążenie słowami:
Przy przeciążeniu najpierw deklarujemy typ zwracany (w tym przypadku Vector), potem słowo kluczowe operator@, gdzie @, to operator, jaki chcemy przeciążyć (sam symbol @ w c++ nie jest operatorem). I teraz: jako pierwszy argument podajemy... i co to właściwie jest? xD
Jest znak &, czyli to jest referencja, czy jakiś rodzaj wskaźnika "this", który będzie wskazywać... właśnie na co?
Potem jak mamy instrukcje return:
return Vector(this->a + x.a, this->b +x.b);
Tu mam rozumieć, że zwracamy obiekt typu Vector i w nawiasie przez wskaźnik this przypisujemy do pola w klasie Vector wartość, która pobieramy z x.a (czyli argumentu z funkcji)? Może mi ktoś łopatologicznie wyjaśnić, co tam się dzieje, bo dzięki internetowym kursom jakoś mniej więcej zrozumiałem idee przeciążania operatorów, ale chyba nie do końca. xd