Przeciążony operator + tworzenie nowych instancji klas.

0

Zastanawia mnie, czy jest możliwość stworzenia przeciążonego operatora np. "+", który będzie służył do tworzenia nowych instancji danej klasy.
Zamiast pisać "NazwaKlasy nazwaObiektu(wartosc1, wartosc2)", chciałbym pisać NazwaKlas nazwaObiektu+(wartosc1, wartosc2).
Wiem, ze wyglada to dziwacznie, ale chce aby to wyrazenie robilo cos innego niz przypisywanie wartosci jak konstruktor.

0

Na przykład:

class Point
{
    int x,y;
  public:
    Point( int pos_x, int pos_y ) : x( pos_x ), y( pos_y ) { }
    friend Point operator+( const Point& first, const Point& second )
    {
      return Point( first.x + second.x, first.y + second.y );
    }
    // albo np. używając std::pair
    friend Point operator+( const Point& first, const std::pair< int, int >& second )
    {
      return Point( first.x + second.first, first.y + second.second );
    }
};

int main( int argc, char** argv )
{
  Point p1( 2, 3 );
  Point p2 = p1 + Point( 10, 20 );
  Point p3 = p1 + std::make_pair( 50, 100 );
  return 0;
}
0

Jeżeli chcesz aby operator "+" działał jak konstruktor to nie, od tego jest konstruktor.
Powyżej masz przykład jak z definicji działa przeładowanie operatora "+".

0

Nawet nie da się w C++ zdefiniować identyfikatora nazwaObiektu+. + jest operatorem i nie da się go łączyć z nazwami zmiennych, funkcji etc.
To jest operator i jeśli chcesz coś zrobić z tym operatorem, musisz napisać operator+.
Więcej: http://en.cppreference.com/w/cpp/language/operators
Złą praktyką jest pisanie przeciążeń operatorów, których działanie jest nieintuicyjne (zmienione). Wprowadza w błąd osoby pielęgnujące kod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1