Przypisywanie
Operator przypisania (=) jest ściśle mówiąc operatorem binarnym. Jego deklaracja jest identyczna z dowolnym innym operatorem binarnym, z następującymi wyjątkami:
- Musi być niestatyczną funkcją składową. Operator = nie może być zadeklarowany jako funkcja nieczłonkowa.
- Nie jest dziedziczony przez klasy pochodne.
- Domyślny operator = funkcja może być generowana przez kompilator dla typów klas, jeśli nie istnieje.
W poniższym przykładzie pokazano, jak zadeklarować operator przypisania:
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;
}
Podany argument jest prawą stroną wyrażenia. Operator zwraca obiekt, aby zachować zachowanie operatora przypisania, który zwraca wartość lewej strony po zakończeniu przypisania. Umożliwia to łączenie łańcuchów przypisań, takich jak:
pt1 = pt2 = pt3;
Operator przypisania kopiowania nie jest mylony z konstruktorem kopiowania. Ten ostatni jest wywoływany podczas budowy nowego obiektu z istniejącego obiektu:
// 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.
Uwaga
Zaleca się, aby postępować zgodnie z regułą trzech klas, które definiują operator przypisania kopiowania, powinny również jawnie definiować konstruktor kopii, destruktor i, począwszy od języka C++11, konstruktora przenoszenia i operatora przypisania przenoszenia.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla