Zuweisung

Der Zuordnungsoperator (=) ist streng genommen ein binärer Operator. Seine Deklaration ist mit jedem anderen binären Operator identisch, mit den folgenden Ausnahmen:

  • Es muss eine nicht statische Memberfunktion sein. Kein Operator= kann als Nichtemberfunktion deklariert werden.
  • Es wird nicht von abgeleiteten Klassen geerbt.
  • Eine Standardoperator = -Funktion kann vom Compiler für Klassentypen generiert werden, wenn keine vorhanden ist.

Das folgende Beispiel veranschaulicht, wie Sie einen Zuweisungsoperator deklarieren:

class Point
{
public:
    int _x, _y;

    // Right side of copy assignment is the argument.
    Point& operator=(const Point&);
};

// Define copy assignment operator.
Point& Point::operator=(const Point& otherPoint)
{
    _x = otherPoint._x;
    _y = otherPoint._y;

    // Assignment operator returns left side of assignment.
    return *this;
}

int main()
{
    Point pt1, pt2;
    pt1 = pt2;
}

Das angegebene Argument ist die rechte Seite des Ausdrucks. Der Operator gibt das Objekt zurück, um das Verhalten des Zuweisungsoperators beizubehalten, der den Wert des linken Rands zurückgibt, nachdem die Zuweisung abgeschlossen ist. Dies ermöglicht die Verkettung von Zuordnungen, z. B.:

pt1 = pt2 = pt3;

Der Kopierzuweisungsoperator ist nicht mit dem Kopierkonstruktor zu verwechseln. Letzteres wird beim Bau eines neuen Objekts aus einem vorhandenen aufgerufen:

// Copy constructor is called--not overloaded copy assignment operator!
Point pt3 = pt1;

// The previous initialization is similar to the following:
Point pt4(pt1); // Copy constructor call.

Hinweis

Es ist ratsam, die Regel von drei zu befolgen, dass eine Klasse, die einen Kopierzuweisungsoperator definiert, auch explizit Kopierkonstruktor, Destruktor und ab C++11, Konstruktor verschieben und Zuweisungsoperator verschieben soll.

Siehe auch