1. Polega dokładnie na tym samym co zwracanie innego typu danych, tyle, że w tym przypadku zwracasz obiekt danej klasy np. jeśli chcesz chcesz przeciążyć operator+.
2.Ponieważ chcesz zwrócić obiekt klasy Vector, a nie zmienną o typie np. int.
3. x.vector przyjmuje wartość jaka kryję się za składową argumentu funkcji.
x.out jest sumą składowej x.vector (argumentu funkcji) oraz x(składowej obiektu, który wywołał tą funkcję).
4. Będzie ona miała w sobie składowe zainicjalizowane wartościami out.x, out.y.
5. Używanie jakiegoś void'a albo int'a mija się z celem w tym przypadku, załóżmy, że chcesz zwrócić w funkcji współrzędne punktu, użyjesz do tego void'a albo int'a? Nawet jeśli byłoby to jakoś możliwe( a nie jest) to zwracał byś wciąż jedną wartość. Tutaj właśnie przychodzi taka klasa Vector, która ma w sobie 2 zmienne, które mogą być współrzędnymi, i bez problemu później możesz je odczytać, odwołując się do składowych tego obiektu.